diff --git a/src/main/java/dev/amble/ait/mixin/server/ServerPlayerMixin.java b/src/main/java/dev/amble/ait/mixin/server/ServerPlayerMixin.java index 38382cdb1..973fb067b 100644 --- a/src/main/java/dev/amble/ait/mixin/server/ServerPlayerMixin.java +++ b/src/main/java/dev/amble/ait/mixin/server/ServerPlayerMixin.java @@ -1,5 +1,11 @@ package dev.amble.ait.mixin.server; +import dev.amble.ait.core.AITItems; +import dev.amble.ait.core.item.SiegeTardisItem; +import dev.amble.ait.core.tardis.manager.ServerTardisManager; +import net.minecraft.entity.damage.DamageSource; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -11,6 +17,8 @@ import dev.amble.ait.core.tardis.util.TardisUtil; import dev.amble.ait.core.world.TardisServerWorld; +import java.util.Objects; + @Mixin(ServerPlayerEntity.class) public class ServerPlayerMixin { @@ -31,4 +39,26 @@ public class ServerPlayerMixin { if (player.hasVehicle() && player.getVehicle() instanceof FlightTardisEntity) ci.cancel(); } + + @Inject(method = "onDeath", at = @At("HEAD")) + public void ait$onDeath(DamageSource damageSource, CallbackInfo ci) { + ServerPlayerEntity player = (ServerPlayerEntity) (Object) this; + + ServerTardisManager.getInstance().forEach(tardis -> { + if (!tardis.siege().isActive()) + return; + + if (!Objects.equals(tardis.siege().getHeldPlayerUUID(), player.getUuid())) + return; + + for (ItemStack itemStack : player.getInventory().main) { + if (itemStack.isOf(AITItems.SIEGE_ITEM)) { + if (tardis.getUuid().equals(SiegeTardisItem.getTardisIdStatic(itemStack))) { + player.getInventory().setStack(player.getInventory().getSlotWithStack(itemStack), Items.AIR.getDefaultStack()); + } + } + } + SiegeTardisItem.placeTardis(tardis, SiegeTardisItem.fromEntity(player)); + }); + } }