Persistent android capability

This commit is contained in:
DBotThePony 2021-08-11 14:53:59 +07:00
parent 7087705f22
commit 5c8657f5b3
Signed by: DBot
GPG Key ID: DCC23B5715498507
5 changed files with 30 additions and 12 deletions

View File

@ -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

View File

@ -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<IAndroidCapability> 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)

View File

@ -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);
}

View File

@ -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());
}
}
}

View File

@ -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<CompoundTag> {
void tick();
void tickClient();
LivingEntity getEntity();