Water handling in android capability

This commit is contained in:
DBotThePony 2021-08-18 23:49:38 +07:00
parent 316c30abb8
commit a6e00d22e8
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 39 additions and 1 deletions
src/main/java/ru/dbotthepony/mc/otm

View File

@ -5,6 +5,7 @@ import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.food.FoodData;
import net.minecraftforge.client.event.InputUpdateEvent;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
@ -132,6 +133,36 @@ public class AndroidCapabilityPlayer extends AndroidCapability {
});
}
private int last_jump_ticks = 20;
@SubscribeEvent
public static void inputEvent(InputUpdateEvent event) {
var ply = event.getPlayer();
var input = event.getMovementInput();
ply.getCapability(MatteryCapability.ANDROID).ifPresent(_cap -> {
if (!(_cap instanceof AndroidCapabilityPlayer cap))
return;
if (ply.getAbilities().mayfly) {
cap.last_jump_ticks = 20;
} else {
if (ply.isInWater()) {
if (ply.isOnGround()) {
cap.last_jump_ticks = 20;
}
if (cap.last_jump_ticks <= 0) {
event.getMovementInput().jumping = false;
event.getMovementInput().up = false;
} else {
cap.last_jump_ticks--;
}
}
}
});
}
private final Player ply;
public AndroidCapabilityPlayer(Player ent) {
@ -154,6 +185,9 @@ public class AndroidCapabilityPlayer extends AndroidCapability {
// TODO: Maybe passive drain?
// extractEnergyInner(BigDecimal.valueOf(new Random().nextDouble()), false);
if (ply.getAirSupply() < ply.getMaxAirSupply())
ply.setAirSupply(ply.getMaxAirSupply());
FoodData stats = ply.getFoodData();
if (stats.needsFood()) {

View File

@ -26,7 +26,7 @@ public class AndroidGui {
@SubscribeEvent
public void onLayerRenderEvent(RenderGameOverlayEvent.PreLayer event) {
if (event.getOverlay() != ForgeIngameGui.FOOD_LEVEL_ELEMENT)
if (event.getOverlay() != ForgeIngameGui.FOOD_LEVEL_ELEMENT && event.getOverlay() != ForgeIngameGui.AIR_LEVEL_ELEMENT)
return;
LocalPlayer ply = mc.player;
@ -55,6 +55,10 @@ public class AndroidGui {
event.setCanceled(true);
last_state = android;
if (event.getOverlay() == ForgeIngameGui.AIR_LEVEL_ELEMENT) {
return;
}
float level;
if (android.getMaxBatteryLevel().compareTo(BigDecimal.ZERO) == 0) {