sounds are go

This commit is contained in:
MachineMuse 2013-04-30 17:46:00 -06:00
parent 9c7e135ff2
commit f4b2fd0fec
14 changed files with 185 additions and 67 deletions

View file

@ -9,6 +9,8 @@ import net.machinemuse.general.geometry.MusePoint2D;
import net.machinemuse.general.gui.clickable.ClickableButton;
import net.machinemuse.general.gui.clickable.ClickableItem;
import net.machinemuse.general.gui.clickable.ClickableModule;
import net.machinemuse.general.sound.Musique;
import net.machinemuse.general.sound.SoundLoader;
import net.machinemuse.powersuits.network.MusePacket;
import net.machinemuse.powersuits.network.packets.MusePacketInstallModuleRequest;
import net.machinemuse.powersuits.network.packets.MusePacketSalvageModuleRequest;
@ -165,6 +167,7 @@ public class InstallSalvageFrame extends ScrollableFrame {
ItemStack stack = targetItem.getSelectedItem().getItem();
IPowerModule module = targetModule.getSelectedModule().getModule();
if (player.capabilities.isCreativeMode || MuseItemUtils.hasInInventory(module.getInstallCost(), player.inventory)) {
Musique.playClientSound(SoundLoader.SOUND_GUI_INSTALL, 1);
// Now send request to server to make it legit
MusePacket newpacket = new MusePacketInstallModuleRequest(
(Player) player,

View file

@ -0,0 +1,64 @@
package net.machinemuse.general.sound
import cpw.mods.fml.common.FMLCommonHandler
import cpw.mods.fml.relauncher.Side
import net.minecraft.client.Minecraft
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.client.audio.SoundManager
import scala.Predef.String
/**
* Handles sound mechanics
*/
object Musique {
def soundsystem = SoundManager.sndSystem
def mcsound = Minecraft.getMinecraft.sndManager
def options = Minecraft.getMinecraft.gameSettings
val soundprefix = "MMMPS"
def playClientSound(soundname: String, volume: Float) {
if (FMLCommonHandler.instance.getEffectiveSide eq Side.CLIENT) {
val pitch: Float = 1.0f
mcsound.playSoundFX(soundname, volume, pitch)
}
}
def makeSoundString(player: EntityPlayer, soundname: String): String = soundprefix + player.username + soundname
def playerSound(player: EntityPlayer, soundname: String, volume: Float, pitch: Float = 1.0f, continuous: Boolean = true) {
if (FMLCommonHandler.instance.getEffectiveSide eq Side.CLIENT) {
val pitch: Float = 1.0f
val unknownflag = true
val soundid = makeSoundString(player, soundname)
if (!soundsystem.playing(soundid)) {
val soundfile = getSoundPoolEntry(soundname)
val amp: Float = 16.0F * Math.max(1, volume)
soundsystem.newSource(unknownflag, soundid, soundfile.soundUrl, soundfile.soundName, false, player.posX.toFloat, player.posY.toFloat, player.posZ.toFloat, 2, amp)
soundsystem.setLooping(soundid, continuous)
soundsystem.play(soundid)
}
soundsystem.setPitch(soundid, pitch)
soundsystem.setPosition(soundid, player.posX.toFloat, player.posY.toFloat, player.posZ.toFloat)
soundsystem.setVolume(soundid, Math.min(volume, 1) * this.options.soundVolume)
soundsystem.setVelocity(soundid, player.motionX.toFloat, player.motionY.toFloat, player.motionZ.toFloat)
}
}
def stopPlayerSound(player: EntityPlayer, soundname: String) {
if (FMLCommonHandler.instance.getEffectiveSide eq Side.CLIENT) {
val soundid = makeSoundString(player, soundname)
val vol = soundsystem.getVolume(soundid) - 0.1f
if (vol > 0) {
soundsystem.setVolume(soundid, vol)
} else {
soundsystem.stop(makeSoundString(player, soundname))
}
}
}
def getSoundPoolEntry(s: String) = mcsound.soundPoolSounds.getRandomSoundFromSoundPool(s)
}

View file

@ -16,14 +16,21 @@ public class SoundLoader {
SOUND_RESOURCE_LOCATION + "GUISelect.ogg", SOUND_RESOURCE_LOCATION + "JetBoots.ogg", SOUND_RESOURCE_LOCATION + "Jetpack.ogg",
SOUND_RESOURCE_LOCATION + "JumpAssist.ogg", SOUND_RESOURCE_LOCATION + "SwimAssist.ogg",
SOUND_RESOURCE_LOCATION + "WaterElectrolyzer.ogg" };
public static final String SOUND_GLIDER = SOUND_PREFIX + "Glider";
public static final String SOUND_GUI_INSTALL = SOUND_PREFIX + "GUIInstall";
public static final String SOUND_GUI_SELECT = SOUND_PREFIX + "GUISelect";
public static final String SOUND_JET_BOOTS = SOUND_PREFIX + "JetBoots";
public static final String SOUND_JETPACK = SOUND_PREFIX + "Jetpack";
public static final String SOUND_JUMP_ASSIST = SOUND_PREFIX + "JumpAssist";
public static final String SOUND_SWIM_ASSIST = SOUND_PREFIX + "SwimAssist";
public static final String SOUND_WATER_ELECTROLYZER = SOUND_PREFIX + "WaterElectrolyzer";
public static final String SOUND_GLIDER = SOUND_PREFIX + "Glider";
public static final float GLIDER_PRIORITY = 5;
public static final String SOUND_JETBOOTS = SOUND_PREFIX + "JetBoots";
public static final float JETBOOTS_PRIORITY = 4;
public static final String SOUND_JETPACK = SOUND_PREFIX + "Jetpack";
public static final float JETPACK_PRIORITY = 3;
public static final String SOUND_SWIMASSIST = SOUND_PREFIX + "SwimAssist";
public static final float SWIMASSIST_PRIORITY = 2;
public static final String SOUND_ELECTROLYZER = SOUND_PREFIX + "WaterElectrolyzer";
public static final float ELECTROLYZER_PRIORITY = 1;
@ForgeSubscribe
public void onSoundLoad(SoundLoadEvent event) {

View file

@ -1,20 +1,20 @@
package net.machinemuse.powersuits.common;
import cpw.mods.fml.common.network.IGuiHandler;
import net.machinemuse.general.gui.GuiFieldTinker;
import net.machinemuse.general.gui.GuiTinkerTable;
import net.machinemuse.general.gui.KeyConfigGui;
import net.machinemuse.powersuits.block.GuiTinkerTable;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityClientPlayerMP;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.stats.AchievementList;
import net.minecraft.world.World;
import cpw.mods.fml.common.network.IGuiHandler;
/**
* Gui handler for this mod. Mainly just takes an ID according to what was
* passed to player.OpenGUI, and opens the corresponding GUI.
*
* @author MachineMuse
*
*/
public class GuiHandler implements IGuiHandler {
@Override
@ -36,6 +36,8 @@ public class GuiHandler implements IGuiHandler {
return new GuiTinkerTable((EntityClientPlayerMP) player);
case 1:
return new KeyConfigGui(player);
case 2:
return new GuiFieldTinker((EntityClientPlayerMP) player);
default:
return null;
}

View file

@ -43,7 +43,7 @@ public class MovementManager {
double jumpAssist = ModuleManager.computeModularProperty(stack, JumpAssistModule.JUMP_MULTIPLIER) * 2;
double drain = ModuleManager.computeModularProperty(stack, JumpAssistModule.JUMP_ENERGY_CONSUMPTION);
double avail = ElectricItemUtils.getPlayerEnergy(player);
Musique.playOneshotSound(player, SoundLoader.SOUND_JUMP_ASSIST, 1);
Musique.playerSound(player, SoundLoader.SOUND_JUMP_ASSIST, (float) (jumpAssist/8.0), 2, false);
if (drain < avail) {
ElectricItemUtils.drainPlayerEnergy(player, drain);
setPlayerJumpTicks(player, jumpAssist);
@ -68,6 +68,7 @@ public class MovementManager {
if (boots != null) {
if (MuseItemUtils.itemHasActiveModule(boots, ShockAbsorberModule.MODULE_SHOCK_ABSORBER) && event.distance > 3) {
double distanceAbsorb = event.distance * ModuleManager.computeModularProperty(boots, ShockAbsorberModule.SHOCK_ABSORB_MULTIPLIER);
Musique.playerSound(player, SoundLoader.SOUND_GUI_INSTALL, (float) (distanceAbsorb), 2, false);
double drain = distanceAbsorb * ModuleManager.computeModularProperty(boots, ShockAbsorberModule.SHOCK_ABSORB_ENERGY_CONSUMPTION);
double avail = ElectricItemUtils.getPlayerEnergy(player);

View file

@ -4,6 +4,8 @@ import net.machinemuse.api.IModularItem;
import net.machinemuse.api.ModuleManager;
import net.machinemuse.api.moduletrigger.IPlayerTickModule;
import net.machinemuse.api.moduletrigger.IToggleableModule;
import net.machinemuse.general.sound.Musique;
import net.machinemuse.general.sound.SoundLoader;
import net.machinemuse.powersuits.item.ItemComponent;
import net.machinemuse.powersuits.powermodule.PowerModuleBase;
import net.machinemuse.utils.ElectricItemUtils;
@ -45,6 +47,7 @@ public class WaterElectrolyzerModule extends PowerModuleBase implements IPlayerT
double energy = ElectricItemUtils.getPlayerEnergy(player);
double energyConsumption = ModuleManager.computeModularProperty(item, WATERBREATHING_ENERGY_CONSUMPTION);
if (energy > energyConsumption && player.getAir() < 10) {
Musique.playClientSound(SoundLoader.SOUND_ELECTROLYZER, 1.0f);
ElectricItemUtils.drainPlayerEnergy(player, energyConsumption);
player.setAir(300);
}

View file

@ -3,6 +3,8 @@ package net.machinemuse.powersuits.powermodule.movement;
import net.machinemuse.api.IModularItem;
import net.machinemuse.api.moduletrigger.IPlayerTickModule;
import net.machinemuse.api.moduletrigger.IToggleableModule;
import net.machinemuse.general.sound.Musique;
import net.machinemuse.general.sound.SoundLoader;
import net.machinemuse.powersuits.control.PlayerInputMap;
import net.machinemuse.powersuits.item.ItemComponent;
import net.machinemuse.powersuits.powermodule.PowerModuleBase;
@ -57,8 +59,9 @@ public class GliderModule extends PowerModuleBase implements IToggleableModule,
if (torso != null && torso.getItem() instanceof IModularItem) {
hasParachute = MuseItemUtils.itemHasActiveModule(torso, ParachuteModule.MODULE_PARACHUTE);
}
if (sneakkey && player.motionY < -0.1 && (!hasParachute || forwardkey > 0)) {
if (sneakkey && player.motionY < 0 && (!hasParachute || forwardkey > 0)) {
if (player.motionY < -0.1) {
float vol = (float)( player.motionX*player.motionX + player.motionZ * player.motionZ);
double motionYchange = Math.min(0.08, -0.1 - player.motionY);
player.motionY += motionYchange;
player.motionX += playerHorzFacing.xCoord * motionYchange;
@ -66,19 +69,8 @@ public class GliderModule extends PowerModuleBase implements IToggleableModule,
// sprinting speed
player.jumpMovementFactor += 0.03f;
// if (gliderTicker == 0) {
// world.playSoundAtEntity(player,
// MuseCommonStrings.SOUND_GLIDER, 5.0F, 1.0F);
// gliderTicker++;
// }
// else {
// gliderTicker++;
// if (gliderTicker >= 35) {
// gliderTicker = 0;
// }
// }
}
} else {
}
}

View file

@ -4,6 +4,8 @@ import net.machinemuse.api.IModularItem;
import net.machinemuse.api.ModuleManager;
import net.machinemuse.api.moduletrigger.IPlayerTickModule;
import net.machinemuse.api.moduletrigger.IToggleableModule;
import net.machinemuse.general.sound.Musique;
import net.machinemuse.general.sound.SoundLoader;
import net.machinemuse.powersuits.control.PlayerInputMap;
import net.machinemuse.powersuits.item.ItemComponent;
import net.machinemuse.powersuits.powermodule.PowerModuleBase;
@ -18,8 +20,8 @@ import java.util.List;
public class JetBootsModule extends PowerModuleBase implements IToggleableModule, IPlayerTickModule {
public static final String MODULE_JETBOOTS = "Jet Boots";
public static final String JET_ENERGY_CONSUMPTION = "Jet Energy Consumption";
public static final String JET_THRUST = "Jet Thrust";
public static final String JET_ENERGY_CONSUMPTION = "Jetboots Energy Consumption";
public static final String JET_THRUST = "Jetboots Thrust";
public JetBootsModule(List<IModularItem> validItems) {
super(validItems);
@ -48,7 +50,7 @@ public class JetBootsModule extends PowerModuleBase implements IToggleableModule
@Override
public void onPlayerTickActive(EntityPlayer player, ItemStack item) {
ItemStack chest = player.getCurrentArmor(1);
if (MuseItemUtils.itemHasActiveModule(chest, JetPackModule.MODULE_JETPACK) || player.isInWater()) {
if (player.isInWater()) {
return;
}
PlayerInputMap movementInput = PlayerInputMap.getInputMapFor(player.username);
@ -61,15 +63,24 @@ public class JetBootsModule extends PowerModuleBase implements IToggleableModule
if (jetEnergy < ElectricItemUtils.getPlayerEnergy(player)) {
thrust *= MusePlayerUtils.getWeightPenaltyRatio(MuseItemUtils.getPlayerWeight(player), 25000);
if (hasFlightControl && thrust > 0) {
MusePlayerUtils.thrust(player, thrust, jetEnergy, true);
thrust = MusePlayerUtils.thrust(player, thrust, true);
Musique.playerSound(player, SoundLoader.SOUND_JETBOOTS, (float) (thrust*12.5), 1.0f, true);
ElectricItemUtils.drainPlayerEnergy(player, thrust * jetEnergy);
} else if (jumpkey && player.motionY < 0.5) {
MusePlayerUtils.thrust(player, thrust, jetEnergy, false);
thrust = MusePlayerUtils.thrust(player, thrust, false);
Musique.playerSound(player, SoundLoader.SOUND_JETBOOTS,(float) (thrust*12.5), 1.0f, true);
ElectricItemUtils.drainPlayerEnergy(player, thrust * jetEnergy);
} else {
Musique.stopPlayerSound(player, SoundLoader.SOUND_JETBOOTS);
}
} else {
Musique.stopPlayerSound(player, SoundLoader.SOUND_JETBOOTS);
}
}
@Override
public void onPlayerTickInactive(EntityPlayer player, ItemStack item) {
Musique.stopPlayerSound(player, SoundLoader.SOUND_JETBOOTS);
}
@Override

View file

@ -4,6 +4,8 @@ import net.machinemuse.api.IModularItem;
import net.machinemuse.api.ModuleManager;
import net.machinemuse.api.moduletrigger.IPlayerTickModule;
import net.machinemuse.api.moduletrigger.IToggleableModule;
import net.machinemuse.general.sound.Musique;
import net.machinemuse.general.sound.SoundLoader;
import net.machinemuse.powersuits.control.PlayerInputMap;
import net.machinemuse.powersuits.item.ItemComponent;
import net.machinemuse.powersuits.powermodule.PowerModuleBase;
@ -18,8 +20,8 @@ import java.util.List;
public class JetPackModule extends PowerModuleBase implements IToggleableModule, IPlayerTickModule {
public static final String MODULE_JETPACK = "Jetpack";
public static final String JET_ENERGY_CONSUMPTION = "Jet Energy Consumption";
public static final String JET_THRUST = "Jet Thrust";
public static final String JET_ENERGY_CONSUMPTION = "Jetpack Energy Consumption";
public static final String JET_THRUST = "Jetpack Thrust";
public JetPackModule(List<IModularItem> validItems) {
super(validItems);
@ -63,15 +65,24 @@ public class JetPackModule extends PowerModuleBase implements IToggleableModule,
if (jetEnergy < ElectricItemUtils.getPlayerEnergy(player)) {
thrust *= MusePlayerUtils.getWeightPenaltyRatio(MuseItemUtils.getPlayerWeight(player), 25000);
if (hasFlightControl && thrust > 0) {
MusePlayerUtils.thrust(player, thrust, jetEnergy, true);
thrust = MusePlayerUtils.thrust(player, thrust, true);
Musique.playerSound(player, SoundLoader.SOUND_JETPACK, (float) (thrust*6.25), 1.0f, true);
ElectricItemUtils.drainPlayerEnergy(player, thrust * jetEnergy);
} else if (jumpkey && player.motionY < 0.5) {
MusePlayerUtils.thrust(player, thrust, jetEnergy, false);
thrust = MusePlayerUtils.thrust(player, thrust, false);
Musique.playerSound(player, SoundLoader.SOUND_JETPACK,(float) (thrust*6.25), 1.0f, true);
ElectricItemUtils.drainPlayerEnergy(player, thrust * jetEnergy);
} else {
Musique.stopPlayerSound(player, SoundLoader.SOUND_JETPACK);
}
} else {
Musique.stopPlayerSound(player, SoundLoader.SOUND_JETPACK);
}
}
@Override
public void onPlayerTickInactive(EntityPlayer player, ItemStack item) {
Musique.stopPlayerSound(player, SoundLoader.SOUND_JETPACK);
}
@Override

View file

@ -3,6 +3,8 @@ package net.machinemuse.powersuits.powermodule.movement;
import net.machinemuse.api.IModularItem;
import net.machinemuse.api.moduletrigger.IPlayerTickModule;
import net.machinemuse.api.moduletrigger.IToggleableModule;
import net.machinemuse.general.sound.Musique;
import net.machinemuse.general.sound.SoundLoader;
import net.machinemuse.powersuits.control.PlayerInputMap;
import net.machinemuse.powersuits.event.MovementManager;
import net.machinemuse.powersuits.item.ItemComponent;

View file

@ -4,6 +4,8 @@ import net.machinemuse.api.IModularItem;
import net.machinemuse.api.ModuleManager;
import net.machinemuse.api.moduletrigger.IPlayerTickModule;
import net.machinemuse.api.moduletrigger.IToggleableModule;
import net.machinemuse.general.sound.Musique;
import net.machinemuse.general.sound.SoundLoader;
import net.machinemuse.powersuits.control.PlayerInputMap;
import net.machinemuse.powersuits.item.ItemComponent;
import net.machinemuse.powersuits.powermodule.PowerModuleBase;
@ -66,14 +68,22 @@ public class SwimAssistModule extends PowerModuleBase implements IToggleableModu
double swimAssistRate = ModuleManager.computeModularProperty(item, SWIM_BOOST_AMOUNT) * 0.05;
double swimEnergyConsumption = ModuleManager.computeModularProperty(item, SWIM_BOOST_ENERGY_CONSUMPTION);
if (swimEnergyConsumption < ElectricItemUtils.getPlayerEnergy(player)) {
MusePlayerUtils.thrust(player, swimAssistRate, swimEnergyConsumption, true);
Musique.playerSound(player, SoundLoader.SOUND_SWIMASSIST, 1.0f, 1.0f, true);
MusePlayerUtils.thrust(player, swimAssistRate, true);
} else {
Musique.stopPlayerSound(player, SoundLoader.SOUND_SWIMASSIST);
}
} else {
Musique.stopPlayerSound(player, SoundLoader.SOUND_SWIMASSIST);
}
} else {
Musique.stopPlayerSound(player, SoundLoader.SOUND_SWIMASSIST);
}
}
@Override
public void onPlayerTickInactive(EntityPlayer player, ItemStack item) {
Musique.stopPlayerSound(player, SoundLoader.SOUND_SWIMASSIST);
}
@Override

View file

@ -8,6 +8,8 @@ import cpw.mods.fml.common.TickType;
import net.machinemuse.api.ModuleManager;
import net.machinemuse.api.moduletrigger.IPlayerTickModule;
import net.machinemuse.general.MuseLogger;
import net.machinemuse.general.sound.Musique;
import net.machinemuse.general.sound.SoundLoader;
import net.machinemuse.powersuits.event.MovementManager;
import net.machinemuse.utils.MuseHeatUtils;
import net.machinemuse.utils.MuseItemUtils;
@ -15,6 +17,7 @@ import net.machinemuse.utils.MuseMathUtils;
import net.machinemuse.utils.MusePlayerUtils;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import java.util.EnumSet;
@ -84,6 +87,12 @@ public class PlayerTickHandler implements ITickHandler {
} else {
player.extinguish();
}
double velsq2 = MuseMathUtils.sumsq(player.motionX, player.motionY, player.motionZ) - 0.5;
if(player.isAirBorne && velsq2 > 0) {
Musique.playerSound(player, SoundLoader.SOUND_GLIDER, (float) (velsq2/3), 1.0f, true);
} else {
Musique.stopPlayerSound(player, SoundLoader.SOUND_GLIDER);
}
}
}

View file

@ -12,4 +12,7 @@ object MuseMathUtils {
if (value > max) return max
return value
}
def sumsq(x: Double, y: Double, z: Double) = x * x + y * y + z * z
def pythag(x: Double, y: Double, z: Double) = Math.sqrt(x * x + y * y + z * z)
}

View file

@ -172,14 +172,14 @@ public class MusePlayerUtils {
}
}
public static void thrust(EntityPlayer player, double thrust, double jetEnergy, boolean flightControl) {
public static double thrust(EntityPlayer player, double thrust, boolean flightControl) {
PlayerInputMap movementInput = PlayerInputMap.getInputMapFor(player.username);
boolean jumpkey = movementInput.jumpKey;
float forwardkey = movementInput.forwardKey;
float strafekey = movementInput.strafeKey;
boolean downkey = movementInput.downKey;
boolean sneakkey = movementInput.sneakKey;
double totalEnergyDrain = 0;
double thrustUsed = 0;
if (flightControl) {
Vec3 desiredDirection = player.getLookVec().normalize();
double strafeX = desiredDirection.zCoord;
@ -218,38 +218,38 @@ public class MusePlayerUtils {
// Brakes
if (player.motionY < 0 && desiredDirection.yCoord >= 0) {
if (-player.motionY > thrust) {
totalEnergyDrain += jetEnergy * thrust;
player.motionY += thrust;
thrustUsed += thrust;
thrust = 0;
} else {
totalEnergyDrain += jetEnergy * Math.abs(player.motionY);
thrust -= player.motionY;
thrustUsed += player.motionY;
player.motionY = 0;
}
}
if (player.motionY < -1) {
totalEnergyDrain += jetEnergy * Math.abs(1 + player.motionY);
thrust += 1 + player.motionY;
thrustUsed -= 1 + player.motionY;
player.motionY = -1;
}
if (Math.abs(player.motionX) > 0 && desiredDirection.lengthVector() == 0) {
if (Math.abs(player.motionX) > thrust) {
totalEnergyDrain += jetEnergy * thrust;
player.motionX -= Math.signum(player.motionX) * thrust;
thrustUsed += thrust;
thrust = 0;
} else {
totalEnergyDrain += jetEnergy * Math.abs(player.motionX);
thrust -= Math.abs(player.motionX);
thrustUsed += Math.abs(player.motionX);
player.motionX = 0;
}
}
if (Math.abs(player.motionZ) > 0 && desiredDirection.lengthVector() == 0) {
if (Math.abs(player.motionZ) > thrust) {
totalEnergyDrain += jetEnergy * thrust;
player.motionZ -= Math.signum(player.motionZ) * thrust;
thrustUsed += thrust;
thrust = 0;
} else {
totalEnergyDrain += jetEnergy * Math.abs(player.motionZ);
thrustUsed += Math.abs(player.motionZ);
thrust -= Math.abs(player.motionZ);
player.motionZ = 0;
}
@ -262,13 +262,12 @@ public class MusePlayerUtils {
player.motionX += vx;
player.motionY += vy;
player.motionZ += vz;
thrustUsed += thrust;
totalEnergyDrain += jetEnergy * (vx * vx + vy * vy + vz * vz);
} else {
Vec3 playerHorzFacing = player.getLookVec();
playerHorzFacing.yCoord = 0;
playerHorzFacing.normalize();
totalEnergyDrain += jetEnergy;
if (forwardkey == 0) {
player.motionY += thrust;
} else {
@ -276,6 +275,7 @@ public class MusePlayerUtils {
player.motionX += playerHorzFacing.xCoord * thrust / root2 * Math.signum(forwardkey);
player.motionZ += playerHorzFacing.zCoord * thrust / root2 * Math.signum(forwardkey);
}
thrustUsed += thrust;
}
// Slow the player if they are going too fast
@ -291,7 +291,7 @@ public class MusePlayerUtils {
player.motionZ *= ratio;
}
resetFloatKickTicks(player);
ElectricItemUtils.drainPlayerEnergy(player, totalEnergyDrain);
return thrustUsed;
}
public static double getWeightPenaltyRatio(double currentWeight, double capacity) {