Update android capability stuff
This commit is contained in:
parent
9efb4d6176
commit
e859b93350
@ -5,7 +5,6 @@ import net.minecraft.client.Minecraft;
|
|||||||
import net.minecraft.client.gui.components.Button;
|
import net.minecraft.client.gui.components.Button;
|
||||||
import net.minecraft.client.gui.screens.DeathScreen;
|
import net.minecraft.client.gui.screens.DeathScreen;
|
||||||
import net.minecraft.client.gui.screens.InBedChatScreen;
|
import net.minecraft.client.gui.screens.InBedChatScreen;
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
|
||||||
import net.minecraft.client.player.LocalPlayer;
|
import net.minecraft.client.player.LocalPlayer;
|
||||||
import net.minecraft.network.chat.TranslatableComponent;
|
import net.minecraft.network.chat.TranslatableComponent;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
@ -16,7 +15,6 @@ import net.minecraftforge.client.event.ScreenEvent;
|
|||||||
import net.minecraftforge.client.event.ScreenOpenEvent;
|
import net.minecraftforge.client.event.ScreenOpenEvent;
|
||||||
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
||||||
import net.minecraftforge.client.gui.ForgeIngameGui;
|
import net.minecraftforge.client.gui.ForgeIngameGui;
|
||||||
import net.minecraftforge.event.TickEvent;
|
|
||||||
import net.minecraftforge.eventbus.api.EventPriority;
|
import net.minecraftforge.eventbus.api.EventPriority;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
@ -27,7 +25,6 @@ import ru.dbotthepony.mc.otm.capability.android.IAndroidCapability;
|
|||||||
import ru.dbotthepony.mc.otm.capability.MatteryCapability;
|
import ru.dbotthepony.mc.otm.capability.MatteryCapability;
|
||||||
import ru.dbotthepony.mc.otm.core.Fraction;
|
import ru.dbotthepony.mc.otm.core.Fraction;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
@ -75,7 +72,7 @@ public class AndroidGui {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mc.player.getCapability(MatteryCapability.ANDROID).ifPresent(cap -> {
|
mc.player.getCapability(MatteryCapability.ANDROID).ifPresent(cap -> {
|
||||||
if (!((AndroidCapabilityPlayer) cap).will_become_android) {
|
if (!((AndroidCapabilityPlayer) cap).willBecomeAndroid) {
|
||||||
known_button.x = known_button_x;
|
known_button.x = known_button_x;
|
||||||
known_button.y = known_button_y;
|
known_button.y = known_button_y;
|
||||||
known_button_x = -1;
|
known_button_x = -1;
|
||||||
@ -114,7 +111,7 @@ public class AndroidGui {
|
|||||||
known_button_screen = screen;
|
known_button_screen = screen;
|
||||||
|
|
||||||
mc.player.getCapability(MatteryCapability.ANDROID).ifPresent(cap -> {
|
mc.player.getCapability(MatteryCapability.ANDROID).ifPresent(cap -> {
|
||||||
if (((AndroidCapabilityPlayer) cap).will_become_android) {
|
if (((AndroidCapabilityPlayer) cap).willBecomeAndroid) {
|
||||||
known_button_screen = screen;
|
known_button_screen = screen;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -35,9 +35,9 @@ public record AndroidStatusPacket(Type type, boolean status) {
|
|||||||
ply.getCapability(MatteryCapability.ANDROID).ifPresent(cap -> {
|
ply.getCapability(MatteryCapability.ANDROID).ifPresent(cap -> {
|
||||||
if (cap instanceof AndroidCapabilityPlayer pcap) {
|
if (cap instanceof AndroidCapabilityPlayer pcap) {
|
||||||
if (type == Type.IS_ANDROID)
|
if (type == Type.IS_ANDROID)
|
||||||
pcap.is_android = status;
|
pcap.isAndroid = status;
|
||||||
else if (type == Type.WILL_BECOME_ANDROID)
|
else if (type == Type.WILL_BECOME_ANDROID)
|
||||||
pcap.will_become_android = status;
|
pcap.willBecomeAndroid = status;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -43,27 +43,26 @@ import java.util.*
|
|||||||
@MethodsReturnNonnullByDefault
|
@MethodsReturnNonnullByDefault
|
||||||
@ParametersAreNonnullByDefault
|
@ParametersAreNonnullByDefault
|
||||||
open class AndroidCapability(@JvmField protected val ent: LivingEntity) : ICapabilityProvider, IAndroidCapability, INBTSerializable<CompoundTag?> {
|
open class AndroidCapability(@JvmField protected val ent: LivingEntity) : ICapabilityProvider, IAndroidCapability, INBTSerializable<CompoundTag?> {
|
||||||
@JvmField
|
@JvmField protected var battery = Fraction.ZERO
|
||||||
protected var energy_stored = Fraction.ZERO
|
@JvmField protected var maxBattery = Fraction(60000)
|
||||||
@JvmField
|
|
||||||
protected var energy_stored_max = Fraction(60000)
|
|
||||||
|
|
||||||
override var batteryItemStack = ItemStack.EMPTY
|
override var batteryItemStack = ItemStack.EMPTY
|
||||||
|
|
||||||
private var network_energy = Fraction(-1)
|
private var remoteBattery = Fraction(-1)
|
||||||
private var network_energy_max = Fraction(-1)
|
private var remoteMaxBattery = Fraction(-1)
|
||||||
private var network_battery = ItemStack.EMPTY
|
private var remoteBatteryStack = ItemStack.EMPTY
|
||||||
|
|
||||||
@JvmField protected val features: MutableMap<AndroidFeatureType<*>?, AndroidFeature> = HashMap()
|
@JvmField protected val features: MutableMap<AndroidFeatureType<*>?, AndroidFeature> = HashMap()
|
||||||
@JvmField protected val network_queue = ArrayList<Any>()
|
@JvmField protected val networkQueue = ArrayList<Any>()
|
||||||
@JvmField protected val delayed_tick_server = ArrayList<Runnable>()
|
@JvmField protected val queuedTicks = ArrayList<Runnable>()
|
||||||
@JvmField protected var network_first = false
|
@JvmField protected var networkFirst = false
|
||||||
|
|
||||||
protected fun addFeature(feature: AndroidFeature): Boolean {
|
protected fun addFeature(feature: AndroidFeature): Boolean {
|
||||||
if (features.containsKey(feature.type)) return false
|
if (features.containsKey(feature.type)) return false
|
||||||
features[feature.type] = feature
|
features[feature.type] = feature
|
||||||
|
|
||||||
if (!ent.level.isClientSide) {
|
if (!ent.level.isClientSide) {
|
||||||
delayed_tick_server.add(Runnable { feature.applyModifiers() })
|
queuedTicks.add(Runnable { feature.applyModifiers() })
|
||||||
}
|
}
|
||||||
if (ent is ServerPlayer) {
|
if (ent is ServerPlayer) {
|
||||||
sendNetwork(AndroidFeaturePacket(true, feature))
|
sendNetwork(AndroidFeaturePacket(true, feature))
|
||||||
@ -80,7 +79,7 @@ open class AndroidCapability(@JvmField protected val ent: LivingEntity) : ICapab
|
|||||||
features[feature] = factory
|
features[feature] = factory
|
||||||
|
|
||||||
if (!ent.level.isClientSide) {
|
if (!ent.level.isClientSide) {
|
||||||
delayed_tick_server.add(Runnable { factory!!.applyModifiers() })
|
queuedTicks.add(Runnable { factory!!.applyModifiers() })
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ent is ServerPlayer) {
|
if (ent is ServerPlayer) {
|
||||||
@ -95,7 +94,7 @@ open class AndroidCapability(@JvmField protected val ent: LivingEntity) : ICapab
|
|||||||
|
|
||||||
if (removed != null) {
|
if (removed != null) {
|
||||||
if (!ent.level.isClientSide) {
|
if (!ent.level.isClientSide) {
|
||||||
delayed_tick_server.add { removed.removeModifiers() }
|
queuedTicks.add { removed.removeModifiers() }
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ent is ServerPlayer) {
|
if (ent is ServerPlayer) {
|
||||||
@ -122,9 +121,9 @@ open class AndroidCapability(@JvmField protected val ent: LivingEntity) : ICapab
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun invalidateNetworkState() {
|
override fun invalidateNetworkState() {
|
||||||
network_energy = Fraction.MINUS_ONE
|
remoteBattery = Fraction.MINUS_ONE
|
||||||
network_energy_max = Fraction.MINUS_ONE
|
remoteMaxBattery = Fraction.MINUS_ONE
|
||||||
network_battery = ItemStack.EMPTY
|
remoteBatteryStack = ItemStack.EMPTY
|
||||||
|
|
||||||
if (ent is ServerPlayer) {
|
if (ent is ServerPlayer) {
|
||||||
for (feature in features.values) {
|
for (feature in features.values) {
|
||||||
@ -134,15 +133,15 @@ open class AndroidCapability(@JvmField protected val ent: LivingEntity) : ICapab
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setEnergy(value: Fraction?) {
|
override fun setEnergy(value: Fraction) {
|
||||||
energy_stored = value!!
|
battery = value
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setMaxEnergy(value: Fraction?) {
|
override fun setMaxEnergy(value: Fraction) {
|
||||||
energy_stored_max = value!!
|
maxBattery = value
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onHurt(event: LivingHurtEvent?) {
|
override fun onHurt(event: LivingHurtEvent) {
|
||||||
for (feature in features.values) {
|
for (feature in features.values) {
|
||||||
feature.onHurt(event)
|
feature.onHurt(event)
|
||||||
}
|
}
|
||||||
@ -151,8 +150,8 @@ open class AndroidCapability(@JvmField protected val ent: LivingEntity) : ICapab
|
|||||||
override fun serializeNBT(): CompoundTag {
|
override fun serializeNBT(): CompoundTag {
|
||||||
val tag = CompoundTag()
|
val tag = CompoundTag()
|
||||||
|
|
||||||
tag["energy_stored"] = energy_stored.serializeNBT()
|
tag["energy_stored"] = battery.serializeNBT()
|
||||||
tag["energy_stored_max"] = energy_stored_max.serializeNBT()
|
tag["energy_stored_max"] = maxBattery.serializeNBT()
|
||||||
tag["battery"] = batteryItemStack.serializeNBT()
|
tag["battery"] = batteryItemStack.serializeNBT()
|
||||||
|
|
||||||
val featureList = ListTag()
|
val featureList = ListTag()
|
||||||
@ -173,11 +172,11 @@ open class AndroidCapability(@JvmField protected val ent: LivingEntity) : ICapab
|
|||||||
compound!!
|
compound!!
|
||||||
|
|
||||||
compound.ifHas("energy_stored") {
|
compound.ifHas("energy_stored") {
|
||||||
energy_stored = Fraction.deserializeNBT(it)
|
battery = Fraction.deserializeNBT(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
compound.ifHas("energy_stored_max") {
|
compound.ifHas("energy_stored_max") {
|
||||||
energy_stored_max = Fraction.deserializeNBT(it)
|
maxBattery = Fraction.deserializeNBT(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
compound.ifHas("battery", CompoundTag::class.java) {
|
compound.ifHas("battery", CompoundTag::class.java) {
|
||||||
@ -199,7 +198,7 @@ open class AndroidCapability(@JvmField protected val ent: LivingEntity) : ICapab
|
|||||||
addFeature(feature)
|
addFeature(feature)
|
||||||
|
|
||||||
if (!ent.level.isClientSide) {
|
if (!ent.level.isClientSide) {
|
||||||
delayed_tick_server.add(Runnable { feature.applyModifiers() })
|
queuedTicks.add(Runnable { feature.applyModifiers() })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -214,39 +213,39 @@ open class AndroidCapability(@JvmField protected val ent: LivingEntity) : ICapab
|
|||||||
|
|
||||||
protected fun sendNetwork(packet: Any) {
|
protected fun sendNetwork(packet: Any) {
|
||||||
if (ent is ServerPlayer) {
|
if (ent is ServerPlayer) {
|
||||||
if (network_first) {
|
if (networkFirst) {
|
||||||
MatteryNetworking.CHANNEL.send(PacketDistributor.PLAYER.with { ent }, packet)
|
MatteryNetworking.CHANNEL.send(PacketDistributor.PLAYER.with { ent }, packet)
|
||||||
} else {
|
} else {
|
||||||
network_queue.add(packet)
|
networkQueue.add(packet)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun tickNetwork() {
|
protected open fun tickNetwork() {
|
||||||
network_first = true
|
networkFirst = true
|
||||||
|
|
||||||
if (ent is ServerPlayer) {
|
if (ent is ServerPlayer) {
|
||||||
if (energy_stored != network_energy) {
|
if (battery != remoteBattery) {
|
||||||
network_energy = energy_stored
|
remoteBattery = battery
|
||||||
sendNetwork(AndroidEnergyPacket(false, energy_stored))
|
sendNetwork(AndroidEnergyPacket(false, battery))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (energy_stored_max != network_energy_max) {
|
if (maxBattery != remoteMaxBattery) {
|
||||||
network_energy_max = energy_stored_max
|
remoteMaxBattery = maxBattery
|
||||||
sendNetwork(AndroidEnergyPacket(true, energy_stored_max))
|
sendNetwork(AndroidEnergyPacket(true, maxBattery))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!network_battery.equals(batteryItemStack, false)) {
|
if (!remoteBatteryStack.equals(batteryItemStack, false)) {
|
||||||
network_battery = batteryItemStack.copy()
|
remoteBatteryStack = batteryItemStack.copy()
|
||||||
sendNetwork(AndroidBatteryPacket(batteryItemStack))
|
sendNetwork(AndroidBatteryPacket(batteryItemStack))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (network_queue.size != 0) {
|
if (networkQueue.size != 0) {
|
||||||
for (packet in network_queue) {
|
for (packet in networkQueue) {
|
||||||
MatteryNetworking.CHANNEL.send(PacketDistributor.PLAYER.with {ent}, packet)
|
MatteryNetworking.CHANNEL.send(PacketDistributor.PLAYER.with {ent}, packet)
|
||||||
}
|
}
|
||||||
|
|
||||||
network_queue.clear()
|
networkQueue.clear()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -255,7 +254,7 @@ open class AndroidCapability(@JvmField protected val ent: LivingEntity) : ICapab
|
|||||||
protected open fun tickInnerClientAlways() {}
|
protected open fun tickInnerClientAlways() {}
|
||||||
|
|
||||||
override fun tickClient() {
|
override fun tickClient() {
|
||||||
delayed_tick_server.clear()
|
queuedTicks.clear()
|
||||||
if (!ent.isAlive) return
|
if (!ent.isAlive) return
|
||||||
tickInnerClientAlways()
|
tickInnerClientAlways()
|
||||||
if (isAndroid()) {
|
if (isAndroid()) {
|
||||||
@ -275,10 +274,10 @@ open class AndroidCapability(@JvmField protected val ent: LivingEntity) : ICapab
|
|||||||
feature.tickServer()
|
feature.tickServer()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (runnable in delayed_tick_server) {
|
for (runnable in queuedTicks) {
|
||||||
runnable.run()
|
runnable.run()
|
||||||
}
|
}
|
||||||
delayed_tick_server.clear()
|
queuedTicks.clear()
|
||||||
tickNetwork()
|
tickNetwork()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -292,12 +291,12 @@ open class AndroidCapability(@JvmField protected val ent: LivingEntity) : ICapab
|
|||||||
if (ent.hasEffect(effect))
|
if (ent.hasEffect(effect))
|
||||||
ent.removeEffect(effect)
|
ent.removeEffect(effect)
|
||||||
|
|
||||||
if (!batteryItemStack.isEmpty && energy_stored < energy_stored_max) {
|
if (!batteryItemStack.isEmpty && battery < maxBattery) {
|
||||||
batteryItemStack.getCapability(CapabilityEnergy.ENERGY).ifPresent {
|
batteryItemStack.getCapability(CapabilityEnergy.ENERGY).ifPresent {
|
||||||
if (it is IMatteryEnergyStorage) {
|
if (it is IMatteryEnergyStorage) {
|
||||||
energy_stored += it.extractEnergyInner(energy_stored_max - energy_stored, false)
|
battery += it.extractEnergyInner(maxBattery - battery, false)
|
||||||
} else {
|
} else {
|
||||||
energy_stored += it.extractEnergy(energy_stored_max - energy_stored, false)
|
battery += it.extractEnergy(maxBattery - battery, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -333,11 +332,11 @@ open class AndroidCapability(@JvmField protected val ent: LivingEntity) : ICapab
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val new = (energy_stored - howMuch).moreThanZero()
|
val new = (battery - howMuch).moreThanZero()
|
||||||
drained += energy_stored - new
|
drained += battery - new
|
||||||
|
|
||||||
if (!simulate) {
|
if (!simulate) {
|
||||||
energy_stored = new
|
battery = new
|
||||||
|
|
||||||
if (ent is ServerPlayer) {
|
if (ent is ServerPlayer) {
|
||||||
ent.awardStat(Registry.Names.POWER_CONSUMED, drained.toInt() * 10)
|
ent.awardStat(Registry.Names.POWER_CONSUMED, drained.toInt() * 10)
|
||||||
@ -369,11 +368,11 @@ open class AndroidCapability(@JvmField protected val ent: LivingEntity) : ICapab
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val new = (energy_stored + howMuch).min(energy_stored_max)
|
val new = (battery + howMuch).min(maxBattery)
|
||||||
received += new - energy_stored
|
received += new - battery
|
||||||
|
|
||||||
if (!simulate) {
|
if (!simulate) {
|
||||||
energy_stored = new
|
battery = new
|
||||||
}
|
}
|
||||||
|
|
||||||
return received
|
return received
|
||||||
@ -395,14 +394,14 @@ open class AndroidCapability(@JvmField protected val ent: LivingEntity) : ICapab
|
|||||||
val it = resolver.get()
|
val it = resolver.get()
|
||||||
|
|
||||||
if (it is IMatteryEnergyStorage) {
|
if (it is IMatteryEnergyStorage) {
|
||||||
return energy_stored + it.batteryLevel
|
return battery + it.batteryLevel
|
||||||
} else {
|
} else {
|
||||||
return energy_stored + it.energyStored
|
return battery + it.energyStored
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return energy_stored
|
return battery
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getMaxBatteryLevel(): Fraction {
|
override fun getMaxBatteryLevel(): Fraction {
|
||||||
@ -413,14 +412,14 @@ open class AndroidCapability(@JvmField protected val ent: LivingEntity) : ICapab
|
|||||||
val it = resolver.get()
|
val it = resolver.get()
|
||||||
|
|
||||||
if (it is IMatteryEnergyStorage) {
|
if (it is IMatteryEnergyStorage) {
|
||||||
return energy_stored_max + it.maxBatteryLevel
|
return maxBattery + it.maxBatteryLevel
|
||||||
} else {
|
} else {
|
||||||
return energy_stored_max + it.maxEnergyStored
|
return maxBattery + it.maxEnergyStored
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return energy_stored_max
|
return maxBattery
|
||||||
}
|
}
|
||||||
|
|
||||||
private val resolver = LazyOptional.of { this }
|
private val resolver = LazyOptional.of { this }
|
||||||
|
@ -25,63 +25,63 @@ import java.util.*
|
|||||||
|
|
||||||
class AndroidCapabilityPlayer(@JvmField val ply: Player) : AndroidCapability(ply) {
|
class AndroidCapabilityPlayer(@JvmField val ply: Player) : AndroidCapability(ply) {
|
||||||
@JvmField
|
@JvmField
|
||||||
var is_android = false
|
var isAndroid = false
|
||||||
private var network_is_android = false
|
private var isAndroidNetwork = false
|
||||||
|
|
||||||
@JvmField
|
@JvmField
|
||||||
var will_become_android = false
|
var willBecomeAndroid = false
|
||||||
private var network_will_become_android = false
|
private var willBecomeAndroidNetwork = false
|
||||||
private val research = ArrayList<AndroidResearch>()
|
private val research = ArrayList<AndroidResearch>()
|
||||||
|
|
||||||
override fun invalidateNetworkState() {
|
override fun invalidateNetworkState() {
|
||||||
super.invalidateNetworkState()
|
super.invalidateNetworkState()
|
||||||
|
|
||||||
network_is_android = false
|
isAndroidNetwork = false
|
||||||
network_will_become_android = false
|
willBecomeAndroidNetwork = false
|
||||||
|
|
||||||
for (instance in research) {
|
for (instance in research) {
|
||||||
instance.dirty = true
|
instance.dirty = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isAndroid(): Boolean = is_android
|
override fun isAndroid(): Boolean = isAndroid
|
||||||
fun isEverAndroid(): Boolean = is_android || will_become_android
|
fun isEverAndroid(): Boolean = isAndroid || willBecomeAndroid
|
||||||
|
|
||||||
fun becomeAndroidSoft() {
|
fun becomeAndroidSoft() {
|
||||||
if (is_android || will_become_android) return
|
if (isAndroid || willBecomeAndroid) return
|
||||||
will_become_android = true
|
willBecomeAndroid = true
|
||||||
(ply as? ServerPlayer)?.displayClientMessage(TranslatableComponent("otm.pill.message").withStyle(ChatFormatting.GRAY), false)
|
(ply as? ServerPlayer)?.displayClientMessage(TranslatableComponent("otm.pill.message").withStyle(ChatFormatting.GRAY), false)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun becomeAndroid() {
|
fun becomeAndroid() {
|
||||||
if (is_android) return
|
if (isAndroid) return
|
||||||
|
|
||||||
is_android = true
|
isAndroid = true
|
||||||
will_become_android = false
|
willBecomeAndroid = false
|
||||||
energy_stored = Fraction(60000)
|
battery = Fraction(60000)
|
||||||
energy_stored_max = Fraction(60000)
|
maxBattery = Fraction(60000)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun becomeAndroidAndKill() {
|
fun becomeAndroidAndKill() {
|
||||||
if (is_android) return
|
if (isAndroid) return
|
||||||
|
|
||||||
becomeAndroid()
|
becomeAndroid()
|
||||||
ply.hurt(Registry.DAMAGE_BECOME_ANDROID, ply.maxHealth * 2)
|
ply.hurt(Registry.DAMAGE_BECOME_ANDROID, ply.maxHealth * 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun becomeHumane() {
|
fun becomeHumane() {
|
||||||
if (will_become_android) will_become_android = false
|
if (willBecomeAndroid) willBecomeAndroid = false
|
||||||
if (!is_android) return
|
if (!isAndroid) return
|
||||||
|
|
||||||
is_android = false
|
isAndroid = false
|
||||||
energy_stored = Fraction(0)
|
battery = Fraction(0)
|
||||||
energy_stored_max = Fraction(60000)
|
maxBattery = Fraction(60000)
|
||||||
dropBattery()
|
dropBattery()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun becomeHumaneAndKill() {
|
fun becomeHumaneAndKill() {
|
||||||
if (will_become_android) will_become_android = false
|
if (willBecomeAndroid) willBecomeAndroid = false
|
||||||
if (!is_android) return
|
if (!isAndroid) return
|
||||||
|
|
||||||
becomeHumane()
|
becomeHumane()
|
||||||
ply.hurt(Registry.DAMAGE_BECOME_HUMANE, ply.maxHealth * 2)
|
ply.hurt(Registry.DAMAGE_BECOME_HUMANE, ply.maxHealth * 2)
|
||||||
@ -90,8 +90,8 @@ class AndroidCapabilityPlayer(@JvmField val ply: Player) : AndroidCapability(ply
|
|||||||
override fun deserializeNBT(compound: CompoundTag?) {
|
override fun deserializeNBT(compound: CompoundTag?) {
|
||||||
super.deserializeNBT(compound!!)
|
super.deserializeNBT(compound!!)
|
||||||
|
|
||||||
is_android = compound.getBoolean("is_android")
|
isAndroid = compound.getBoolean("is_android")
|
||||||
will_become_android = compound.getBoolean("will_become_android")
|
willBecomeAndroid = compound.getBoolean("will_become_android")
|
||||||
research.clear()
|
research.clear()
|
||||||
|
|
||||||
val list = compound.getList("research", Tag.TAG_COMPOUND.toInt())
|
val list = compound.getList("research", Tag.TAG_COMPOUND.toInt())
|
||||||
@ -112,8 +112,8 @@ class AndroidCapabilityPlayer(@JvmField val ply: Player) : AndroidCapability(ply
|
|||||||
override fun serializeNBT(): CompoundTag {
|
override fun serializeNBT(): CompoundTag {
|
||||||
val tag = super.serializeNBT()
|
val tag = super.serializeNBT()
|
||||||
|
|
||||||
tag["is_android"] = is_android
|
tag["is_android"] = isAndroid
|
||||||
tag["will_become_android"] = will_become_android
|
tag["will_become_android"] = willBecomeAndroid
|
||||||
|
|
||||||
val list = ListTag()
|
val list = ListTag()
|
||||||
|
|
||||||
@ -146,14 +146,14 @@ class AndroidCapabilityPlayer(@JvmField val ply: Player) : AndroidCapability(ply
|
|||||||
|
|
||||||
override fun tickNetwork() {
|
override fun tickNetwork() {
|
||||||
super.tickNetwork()
|
super.tickNetwork()
|
||||||
if (is_android != network_is_android) {
|
if (isAndroid != isAndroidNetwork) {
|
||||||
network_is_android = is_android
|
isAndroidNetwork = isAndroid
|
||||||
sendNetwork(AndroidStatusPacket(AndroidStatusPacket.Type.IS_ANDROID, is_android))
|
sendNetwork(AndroidStatusPacket(AndroidStatusPacket.Type.IS_ANDROID, isAndroid))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (will_become_android != network_will_become_android) {
|
if (willBecomeAndroid != willBecomeAndroidNetwork) {
|
||||||
network_will_become_android = will_become_android
|
willBecomeAndroidNetwork = willBecomeAndroid
|
||||||
sendNetwork(AndroidStatusPacket(AndroidStatusPacket.Type.WILL_BECOME_ANDROID, will_become_android))
|
sendNetwork(AndroidStatusPacket(AndroidStatusPacket.Type.WILL_BECOME_ANDROID, willBecomeAndroid))
|
||||||
}
|
}
|
||||||
|
|
||||||
for (instance in research) {
|
for (instance in research) {
|
||||||
@ -170,7 +170,7 @@ class AndroidCapabilityPlayer(@JvmField val ply: Player) : AndroidCapability(ply
|
|||||||
override fun tickInnerClientAlways() {
|
override fun tickInnerClientAlways() {
|
||||||
super.tickInnerClientAlways()
|
super.tickInnerClientAlways()
|
||||||
|
|
||||||
if (will_become_android) {
|
if (willBecomeAndroid) {
|
||||||
if (ply.isSleeping) {
|
if (ply.isSleeping) {
|
||||||
sleep_ticks++
|
sleep_ticks++
|
||||||
} else {
|
} else {
|
||||||
@ -182,7 +182,7 @@ class AndroidCapabilityPlayer(@JvmField val ply: Player) : AndroidCapability(ply
|
|||||||
override fun tickServerAlways() {
|
override fun tickServerAlways() {
|
||||||
super.tickServerAlways()
|
super.tickServerAlways()
|
||||||
|
|
||||||
if (will_become_android) {
|
if (willBecomeAndroid) {
|
||||||
if (ply.isSleeping) {
|
if (ply.isSleeping) {
|
||||||
sleep_ticks++
|
sleep_ticks++
|
||||||
|
|
||||||
@ -268,7 +268,7 @@ class AndroidCapabilityPlayer(@JvmField val ply: Player) : AndroidCapability(ply
|
|||||||
|
|
||||||
val original = resolver.resolve().get() as AndroidCapabilityPlayer
|
val original = resolver.resolve().get() as AndroidCapabilityPlayer
|
||||||
|
|
||||||
if (original.will_become_android && event.isWasDeath) {
|
if (original.willBecomeAndroid && event.isWasDeath) {
|
||||||
original.becomeAndroid()
|
original.becomeAndroid()
|
||||||
(event.player as? ServerPlayer)?.displayClientMessage(TranslatableComponent("otm.pill.message_finish").withStyle(ChatFormatting.DARK_RED), false)
|
(event.player as? ServerPlayer)?.displayClientMessage(TranslatableComponent("otm.pill.message_finish").withStyle(ChatFormatting.DARK_RED), false)
|
||||||
}
|
}
|
||||||
|
@ -37,9 +37,9 @@ interface IAndroidCapability : IMatteryEnergyStorage, INBTSerializable<CompoundT
|
|||||||
|
|
||||||
fun isAndroid(): Boolean = true
|
fun isAndroid(): Boolean = true
|
||||||
|
|
||||||
fun onHurt(event: LivingHurtEvent?) {}
|
fun onHurt(event: LivingHurtEvent) {}
|
||||||
var batteryItemStack: ItemStack
|
var batteryItemStack: ItemStack
|
||||||
fun invalidateNetworkState() // tell capability that player forgot everything, and everything needs to be re-networked
|
fun invalidateNetworkState() // tell capability that player forgot everything, and everything needs to be re-networked
|
||||||
fun setEnergy(value: Fraction?)
|
fun setEnergy(value: Fraction)
|
||||||
fun setMaxEnergy(value: Fraction?)
|
fun setMaxEnergy(value: Fraction)
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user