90 lines
4 KiB
Java
90 lines
4 KiB
Java
package net.machinemuse.powersuits.event;
|
|
|
|
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
|
import net.machinemuse.api.ModuleManager;
|
|
import net.machinemuse.api.moduletrigger.IPlayerTickModule;
|
|
import net.machinemuse.general.sound.SoundDictionary;
|
|
import net.machinemuse.numina.basemod.NuminaConfig;
|
|
import net.machinemuse.numina.general.MuseMathUtils;
|
|
import net.machinemuse.numina.sound.Musique;
|
|
import net.machinemuse.powersuits.common.Config;
|
|
import net.machinemuse.utils.MuseHeatUtils;
|
|
import net.machinemuse.utils.MuseItemUtils;
|
|
import net.machinemuse.utils.MusePlayerUtils;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraftforge.event.entity.living.LivingEvent;
|
|
|
|
import java.util.List;
|
|
|
|
/**
|
|
* Created by Claire Semple on 9/8/2014.
|
|
*
|
|
* Ported to Java by lehjr on 10/24/16.
|
|
*/
|
|
public class PlayerUpdateHandler {
|
|
@SubscribeEvent
|
|
public void onPlayerUpdate(LivingEvent.LivingUpdateEvent e){
|
|
if (e.entity instanceof EntityPlayer){
|
|
EntityPlayer player = (EntityPlayer) e.entity;
|
|
|
|
List<ItemStack> modularItemsEquipped = MuseItemUtils.modularItemsEquipped(player);
|
|
double totalWeight = MuseItemUtils.getPlayerWeight(player);
|
|
double weightCapacity = Config.getWeightCapacity();
|
|
for (ItemStack stack :modularItemsEquipped) {
|
|
if (stack.getTagCompound().hasKey("ench")) {
|
|
stack.getTagCompound().removeTag("ench");
|
|
}
|
|
}
|
|
|
|
boolean foundItemWithModule = false;
|
|
for (IPlayerTickModule module : ModuleManager.getPlayerTickModules()) {
|
|
foundItemWithModule = false;
|
|
for (ItemStack itemStack : modularItemsEquipped) {
|
|
if (module.isValidForItem(itemStack)) {
|
|
if (ModuleManager.itemHasActiveModule(itemStack, module.getDataName())) {
|
|
module.onPlayerTickActive(player, itemStack);
|
|
foundItemWithModule = true;
|
|
}
|
|
}
|
|
}
|
|
if (!foundItemWithModule) {
|
|
for (ItemStack itemStack : modularItemsEquipped) {
|
|
module.onPlayerTickInactive(player, itemStack);
|
|
}
|
|
}
|
|
}
|
|
|
|
boolean foundItem = modularItemsEquipped.size() > 0;
|
|
|
|
if (foundItem) {
|
|
player.fallDistance = (float) MovementManager.computeFallHeightFromVelocity(MuseMathUtils.clampDouble(player.motionY, -1000.0, 0.0));
|
|
if (totalWeight > weightCapacity) {
|
|
player.motionX *= weightCapacity / totalWeight;
|
|
player.motionZ *= weightCapacity / totalWeight;
|
|
}
|
|
MuseHeatUtils.coolPlayer(player, MusePlayerUtils.getPlayerCoolingBasedOnMaterial(player));
|
|
double maxHeat = MuseHeatUtils.getMaxHeat(player);
|
|
double currHeat = MuseHeatUtils.getPlayerHeat(player);
|
|
if (currHeat > maxHeat) {
|
|
player.attackEntityFrom(MuseHeatUtils.overheatDamage, (float) (Math.sqrt(currHeat - maxHeat)/* was (int) */ / 4));
|
|
player.setFire(1);
|
|
}
|
|
else {
|
|
player.extinguish();
|
|
}
|
|
double velsq2 = MuseMathUtils.sumsq(player.motionX, player.motionY, player.motionZ) - 0.5;
|
|
|
|
if ((player.worldObj.isRemote) && NuminaConfig.useSounds()) {
|
|
if (player.isAirBorne && velsq2 > 0) {
|
|
Musique.playerSound(player, SoundDictionary.SOUND_GLIDER, (float)(velsq2 / 3), 1.0f, true);
|
|
}
|
|
else {
|
|
Musique.stopPlayerSound(player, SoundDictionary.SOUND_GLIDER);
|
|
}
|
|
}
|
|
} // kinda hacky fix for item that gets unequipped when the sound is playing, like when player dies or takes it off
|
|
else Musique.stopPlayerSound(player, SoundDictionary.SOUND_GLIDER);
|
|
}
|
|
}
|
|
} |