From 5c8657f5b3e3d6ac9b4d5fb4723f334651e7b4b4 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Wed, 11 Aug 2021 14:53:59 +0700 Subject: [PATCH] Persistent android capability --- build.gradle | 2 +- .../mc/otm/OverdriveThatMatters.java | 32 +++++++++++++++---- .../entity/BlockEntityAndroidStation.java | 2 +- .../capability/AndroidCapabilityPlayer.java | 2 -- .../mc/otm/capability/IAndroidCapability.java | 4 ++- 5 files changed, 30 insertions(+), 12 deletions(-) diff --git a/build.gradle b/build.gradle index 7739e2119..6141a3314 100644 --- a/build.gradle +++ b/build.gradle @@ -128,7 +128,7 @@ dependencies { // Specify the version of Minecraft to use. If this is any group other than 'net.minecraft', it is assumed // that the dep is a ForgeGradle 'patcher' dependency, and its patches will be applied. // The userdev artifact is a special name and will get all sorts of transformations applied to it. - minecraft 'net.minecraftforge:forge:1.17.1-37.0.27' + minecraft 'net.minecraftforge:forge:1.17.1-37.0.32' // Real mod deobf dependency examples - these get remapped to your current mappings // compileOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}:api") // Adds JEI API as a compile dependency diff --git a/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java b/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java index 4be580d96..75d1140f5 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java +++ b/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java @@ -18,10 +18,14 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.gui.ForgeIngameGui; import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.INBTSerializable; +import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.event.AttachCapabilitiesEvent; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.event.TickEvent; +import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.InterModComms; import net.minecraftforge.fml.common.Mod; @@ -114,13 +118,6 @@ public class OverdriveThatMatters { event.addCapability(android_cap_location, new AndroidCapabilityPlayer((Player) event.getObject())); } - @SubscribeEvent - public void onPostTick(TickEvent.ServerTickEvent event) { - if (event.phase == TickEvent.Phase.END) { - - } - } - @SubscribeEvent public void onLivingTick(LivingEvent.LivingUpdateEvent event) { if (event.getEntity() instanceof ServerPlayer ply) { @@ -130,6 +127,27 @@ public class OverdriveThatMatters { } } + @SubscribeEvent + public void onPlayerCloneEvent(PlayerEvent.Clone event) { + event.getPlayer().getCapability(MatteryCapability.ANDROID).ifPresent((cap) -> { + LazyOptional resolver = event.getOriginal().getCapability(MatteryCapability.ANDROID); + + if (!resolver.isPresent() || resolver.resolve().isEmpty()) { + event.getOriginal().reviveCaps(); + resolver = event.getOriginal().getCapability(MatteryCapability.ANDROID); + LOGGER.info("revived cap {}", resolver.resolve()); + } + + if (!resolver.isPresent() || resolver.resolve().isEmpty()) { + event.getOriginal().invalidateCaps(); + return; + } + + cap.deserializeNBT(resolver.resolve().get().serializeNBT()); + event.getOriginal().invalidateCaps(); + }); + } + @SubscribeEvent public void onLayerRenderEvent(RenderGameOverlayEvent.PreLayer event) { if (event.getOverlay() != ForgeIngameGui.FOOD_LEVEL_ELEMENT) diff --git a/src/main/java/ru/dbotthepony/mc/otm/block/entity/BlockEntityAndroidStation.java b/src/main/java/ru/dbotthepony/mc/otm/block/entity/BlockEntityAndroidStation.java index c172e2120..0eef4e3f9 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/block/entity/BlockEntityAndroidStation.java +++ b/src/main/java/ru/dbotthepony/mc/otm/block/entity/BlockEntityAndroidStation.java @@ -37,7 +37,7 @@ public class BlockEntityAndroidStation extends BlockEntityMatteryPoweredMachine public BlockEntityAndroidStation(BlockPos p_155229_, BlockState p_155230_) { super(OverdriveThatMatters.ANDROID_STATION_FACTORY, p_155229_, p_155230_); - energy = new MatteryMachineEnergyStorage(MatteryMachineEnergyStorage.MachineType.WORKER, new BigDecimal(128_000)); + energy = new MatteryMachineEnergyStorage(MatteryMachineEnergyStorage.MachineType.WORKER, new BigDecimal(128_000), new BigDecimal(4096), new BigDecimal(256)); energy_resolver = LazyOptional.of(() -> energy); } diff --git a/src/main/java/ru/dbotthepony/mc/otm/capability/AndroidCapabilityPlayer.java b/src/main/java/ru/dbotthepony/mc/otm/capability/AndroidCapabilityPlayer.java index da98e7df4..85b610567 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/capability/AndroidCapabilityPlayer.java +++ b/src/main/java/ru/dbotthepony/mc/otm/capability/AndroidCapabilityPlayer.java @@ -69,8 +69,6 @@ public class AndroidCapabilityPlayer extends AndroidCapability { if (saturation_changed) { stats.setSaturation(20F - saturation_points_missing); } - - OverdriveThatMatters.LOGGER.info("New power level {}", getBatteryLevel()); } } } diff --git a/src/main/java/ru/dbotthepony/mc/otm/capability/IAndroidCapability.java b/src/main/java/ru/dbotthepony/mc/otm/capability/IAndroidCapability.java index 216e447af..64540a14a 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/capability/IAndroidCapability.java +++ b/src/main/java/ru/dbotthepony/mc/otm/capability/IAndroidCapability.java @@ -1,14 +1,16 @@ package ru.dbotthepony.mc.otm.capability; +import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemStack; import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.common.util.INBTSerializable; import ru.dbotthepony.mc.otm.network.AndroidCapabilityChangePacket; import javax.annotation.Nonnull; import javax.annotation.Nullable; -public interface IAndroidCapability extends IMatteryEnergyStorage { +public interface IAndroidCapability extends IMatteryEnergyStorage, INBTSerializable { void tick(); void tickClient(); LivingEntity getEntity();