parent
130617d793
commit
6bde5ff954
@ -21,6 +21,7 @@ abstract class AndroidSwitchableFeature(type: AndroidFeatureType<*>, android: Ma
|
||||
})
|
||||
|
||||
open val allowToSwitchByPlayer: Boolean get() = true
|
||||
open val allowToSwitchByPlayerWhileSpectator: Boolean get() = true
|
||||
|
||||
// TODO: PoseStack is stripped from server dist
|
||||
// but it doesn't seem to cause issues?
|
||||
|
@ -79,7 +79,7 @@ class ItemMagnetFeature(capability: MatteryPlayerCapability) : AndroidSwitchable
|
||||
private val clientPredicate = Predicate<Entity> { it is ItemEntity && (datatable[it] ?: SharedItemEntityData.EMPTY).let { !it.hasPickupDelay && (it.owner == null || it.owner != ply.uuid || it.lifespan - it.age <= 200) } }
|
||||
|
||||
private fun doTick(server: Boolean) {
|
||||
if (server && !android.androidEnergy.extractEnergyInnerExact(ServerConfig.AndroidItemMagnet.POWER_DRAW, true).isPositive) {
|
||||
if (ply.isSpectator || server && !android.androidEnergy.extractEnergyInnerExact(ServerConfig.AndroidItemMagnet.POWER_DRAW, true).isPositive) {
|
||||
return
|
||||
}
|
||||
|
||||
@ -120,7 +120,7 @@ class ItemMagnetFeature(capability: MatteryPlayerCapability) : AndroidSwitchable
|
||||
override fun tickClient() {
|
||||
super.tickClient()
|
||||
|
||||
if (isActive && android.androidEnergy.extractEnergyInnerExact(ServerConfig.AndroidItemMagnet.POWER_DRAW, true).isPositive) {
|
||||
if (!ply.isSpectator && isActive && android.androidEnergy.extractEnergyInnerExact(ServerConfig.AndroidItemMagnet.POWER_DRAW, true).isPositive) {
|
||||
doTick(false)
|
||||
}
|
||||
}
|
||||
|
@ -83,6 +83,11 @@ class JumpBoostFeature(capability: MatteryPlayerCapability) : AndroidSwitchableF
|
||||
|
||||
fun movementTick(isJumping: Boolean, isShifting: Boolean) {
|
||||
check(ply !is ServerPlayer) { "Invalid side" }
|
||||
|
||||
if (ply.isSpectator) {
|
||||
return
|
||||
}
|
||||
|
||||
val old = lastGround
|
||||
lastGround = ply.isOnGround
|
||||
|
||||
|
@ -11,16 +11,22 @@ import ru.dbotthepony.mc.otm.client.render.ResearchIcons
|
||||
import ru.dbotthepony.mc.otm.registry.AndroidFeatures
|
||||
|
||||
class NightVisionFeature(android: MatteryPlayerCapability) : AndroidSwitchableFeature(AndroidFeatures.NIGHT_VISION, android) {
|
||||
override val allowToSwitchByPlayerWhileSpectator: Boolean
|
||||
get() = true
|
||||
|
||||
override fun tickServer() {
|
||||
if (isActive) {
|
||||
val effect = android.ply.activeEffectsMap[MobEffects.NIGHT_VISION]
|
||||
|
||||
if ((effect == null || effect.duration < 220) && android.androidEnergy.extractEnergyInnerExact(ServerConfig.NIGHT_VISION_POWER_DRAW, true).isPositive) {
|
||||
if ((effect == null || effect.duration < 220) && (ply.isSpectator || android.androidEnergy.extractEnergyInnerExact(ServerConfig.NIGHT_VISION_POWER_DRAW, true).isPositive)) {
|
||||
android.ply.addEffect(MobEffectInstance(MobEffects.NIGHT_VISION, 220))
|
||||
|
||||
if (!ply.isSpectator) {
|
||||
android.androidEnergy.extractEnergyInner(ServerConfig.NIGHT_VISION_POWER_DRAW, false)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun removeModifiers() {
|
||||
val effect = android.ply.activeEffectsMap[MobEffects.NIGHT_VISION]
|
||||
|
@ -69,7 +69,14 @@ class ShockwaveFeature(capability: MatteryPlayerCapability) : AndroidSwitchableF
|
||||
private set
|
||||
|
||||
override fun tickClient() {
|
||||
if (isActive && ply.isShiftKeyDown && cooldown <= 0 && android.androidEnergy.extractEnergyInnerExact(ServerConfig.Shockwave.ENERGY_COST, true).isPositive && ply.deltaMovement.y < -0.01) {
|
||||
if (
|
||||
!ply.isSpectator &&
|
||||
isActive &&
|
||||
ply.isShiftKeyDown &&
|
||||
cooldown <= 0 &&
|
||||
android.androidEnergy.extractEnergyInnerExact(ServerConfig.Shockwave.ENERGY_COST, true).isPositive &&
|
||||
ply.deltaMovement.y < -0.01
|
||||
) {
|
||||
ply.deltaMovement += Vector(0.0, -ServerConfig.Shockwave.ACCELERATION / 20.0, 0.0)
|
||||
}
|
||||
|
||||
@ -77,7 +84,7 @@ class ShockwaveFeature(capability: MatteryPlayerCapability) : AndroidSwitchableF
|
||||
}
|
||||
|
||||
fun shockwave() {
|
||||
if (cooldown > 0 || !android.androidEnergy.extractEnergyInnerExact(ServerConfig.Shockwave.ENERGY_COST, false).isPositive) {
|
||||
if (ply.isSpectator || cooldown > 0 || !android.androidEnergy.extractEnergyInnerExact(ServerConfig.Shockwave.ENERGY_COST, false).isPositive) {
|
||||
return
|
||||
}
|
||||
|
||||
@ -156,13 +163,13 @@ class ShockwaveFeature(capability: MatteryPlayerCapability) : AndroidSwitchableF
|
||||
}
|
||||
|
||||
private fun ticker(isClient: Boolean) {
|
||||
if (!ply.isOnGround) {
|
||||
if (!ply.isOnGround || ply.isSpectator) {
|
||||
airTicks = (airTicks + 1).coerceAtMost(3)
|
||||
} else {
|
||||
airTicks = (airTicks - 1).coerceAtLeast(0)
|
||||
}
|
||||
|
||||
if (isActive && cooldown <= 0 && android.androidEnergy.extractEnergyInnerExact(ServerConfig.Shockwave.ENERGY_COST, true).isPositive) {
|
||||
if (!ply.isSpectator && isActive && cooldown <= 0 && android.androidEnergy.extractEnergyInnerExact(ServerConfig.Shockwave.ENERGY_COST, true).isPositive) {
|
||||
val old = wasMidair
|
||||
wasMidair = !ply.isOnGround
|
||||
|
||||
|
@ -890,7 +890,7 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
|
||||
fun canEntitySpawn(event: LivingSpawnEvent.CheckSpawn) {
|
||||
if (event.spawnReason == MobSpawnType.NATURAL && event.entity is Phantom) {
|
||||
for (ply in event.entity.level.players()) {
|
||||
if (ply.matteryPlayer?.isAndroid == true) {
|
||||
if (!ply.isSpectator && ply.matteryPlayer?.isAndroid == true) {
|
||||
val feature = (ply.matteryPlayer?.getFeature(AndroidFeatures.PHANTOM_ATTRACTOR) as AndroidSwitchableFeature?)
|
||||
|
||||
if (feature?.isActive != true) {
|
||||
|
@ -49,11 +49,14 @@ object AndroidMenuKeyMapping : KeyMapping("key.otm.android_menu", KeyConflictCon
|
||||
super.setDown(isDown)
|
||||
|
||||
if (old != isDown) {
|
||||
val player = minecraft.player
|
||||
val matteryPlayer = player?.matteryPlayer
|
||||
|
||||
if (
|
||||
minecraft.screen == null &&
|
||||
isDown &&
|
||||
minecraft.player?.matteryPlayer?.isAndroid == true &&
|
||||
minecraft.player?.matteryPlayer?.features?.anyMatch { it is AndroidSwitchableFeature && it.allowToSwitchByPlayer } == true
|
||||
matteryPlayer?.isAndroid == true &&
|
||||
matteryPlayer.features.anyMatch { it is AndroidSwitchableFeature && it.allowToSwitchByPlayer && (!player.isSpectator || it.allowToSwitchByPlayerWhileSpectator) }
|
||||
) {
|
||||
grabbedInput = true
|
||||
minecraft.mouseHandler.releaseMouse()
|
||||
@ -110,7 +113,12 @@ object AndroidMenuKeyMapping : KeyMapping("key.otm.android_menu", KeyConflictCon
|
||||
return
|
||||
}
|
||||
|
||||
val features = minecraft.player?.matteryPlayer?.features?.filter { it is AndroidSwitchableFeature && it.allowToSwitchByPlayer }?.collect(Collectors.toList()) as MutableList<AndroidSwitchableFeature>? ?: return
|
||||
val player = minecraft.player ?: return
|
||||
val matteryPlayer = player.matteryPlayer ?: return
|
||||
|
||||
val features = matteryPlayer.features
|
||||
.filter { it is AndroidSwitchableFeature && it.allowToSwitchByPlayer && (!player.isSpectator || it.allowToSwitchByPlayerWhileSpectator) }
|
||||
.collect(Collectors.toList()) as MutableList<AndroidSwitchableFeature>
|
||||
|
||||
if (features.isEmpty()) {
|
||||
lastRender = System.nanoTime()
|
||||
|
@ -326,14 +326,14 @@ class SwitchAndroidFeaturePacket(val type: AndroidFeatureType<*>, val newState:
|
||||
|
||||
val feature = matteryPlayer.getFeature(type) ?: return@enqueueWork
|
||||
|
||||
if (feature is AndroidActiveFeature && feature.allowToSwitchByPlayer) {
|
||||
if (feature is AndroidActiveFeature && feature.allowToSwitchByPlayer && (!matteryPlayer.ply.isSpectator || feature.allowToSwitchByPlayerWhileSpectator)) {
|
||||
matteryPlayer.features
|
||||
.map { it as? AndroidActiveFeature }
|
||||
.filter { it != null }
|
||||
.filter { it !== feature && it!!.allowToSwitchByPlayer }
|
||||
.filter { it !== feature && it!!.allowToSwitchByPlayer && (!matteryPlayer.ply.isSpectator || it.allowToSwitchByPlayerWhileSpectator) }
|
||||
.forEach { it!!.isActive = false }
|
||||
feature.isActive = newState
|
||||
} else if (feature is AndroidSwitchableFeature && feature.allowToSwitchByPlayer) {
|
||||
} else if (feature is AndroidSwitchableFeature && feature.allowToSwitchByPlayer && (!matteryPlayer.ply.isSpectator || feature.allowToSwitchByPlayerWhileSpectator)) {
|
||||
feature.isActive = newState
|
||||
}
|
||||
}
|
||||
@ -357,7 +357,7 @@ class ActivateAndroidFeaturePacket(val type: AndroidFeatureType<*>) : MatteryPac
|
||||
context.enqueueWork {
|
||||
val matteryPlayer = context.sender?.matteryPlayer ?: return@enqueueWork
|
||||
|
||||
if (!matteryPlayer.isAndroid) {
|
||||
if (!matteryPlayer.isAndroid || matteryPlayer.ply.isSpectator) {
|
||||
return@enqueueWork
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user