Scout/src/main/java/pm/c7/scout/mixin/ServerPlayerEntityMixin.java

95 lines
3.8 KiB
Java

package pm.c7.scout.mixin;
import io.netty.buffer.Unpooled;
import net.minecraft.entity.damage.DamageSource;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.collection.DefaultedList;
import net.minecraft.world.GameRules;
import org.quiltmc.qsl.networking.api.ServerPlayNetworking;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import pm.c7.scout.ScoutNetworking;
import pm.c7.scout.ScoutScreenHandler;
import pm.c7.scout.ScoutUtil;
import pm.c7.scout.item.BaseBagItem;
import pm.c7.scout.item.BaseBagItem.BagType;
import pm.c7.scout.screen.BagSlot;
@Mixin(ServerPlayerEntity.class)
public class ServerPlayerEntityMixin {
@Inject(method = "onDeath", at = @At("HEAD"))
private void scout$attemptFixGraveMods(DamageSource source, CallbackInfo callbackInfo) {
ServerPlayerEntity player = (ServerPlayerEntity) (Object) this;
ScoutScreenHandler handler = (ScoutScreenHandler) player.playerScreenHandler;
if (!player.world.getGameRules().getBoolean(GameRules.KEEP_INVENTORY)) {
ItemStack backStack = ScoutUtil.findBagItem(player, BagType.SATCHEL, false);
if (!backStack.isEmpty()) {
BaseBagItem bagItem = (BaseBagItem) backStack.getItem();
int slots = bagItem.getSlotCount();
DefaultedList<BagSlot> bagSlots = handler.scout$getSatchelSlots();
for (int i = 0; i < slots; i++) {
BagSlot slot = bagSlots.get(i);
slot.setInventory(null);
slot.setEnabled(false);
}
PacketByteBuf packet = new PacketByteBuf(Unpooled.buffer());
packet.writeBoolean(false);
packet.writeInt(0);
packet.writeItemStack(backStack);
ServerPlayNetworking.send(player, ScoutNetworking.ENABLE_SLOTS, packet);
}
ItemStack leftPouchStack = ScoutUtil.findBagItem(player, BagType.POUCH, false);
if (!leftPouchStack.isEmpty()) {
BaseBagItem bagItem = (BaseBagItem) leftPouchStack.getItem();
int slots = bagItem.getSlotCount();
DefaultedList<BagSlot> bagSlots = handler.scout$getLeftPouchSlots();
for (int i = 0; i < slots; i++) {
BagSlot slot = bagSlots.get(i);
slot.setInventory(null);
slot.setEnabled(false);
}
PacketByteBuf packet = new PacketByteBuf(Unpooled.buffer());
packet.writeBoolean(false);
packet.writeInt(0);
packet.writeItemStack(leftPouchStack);
ServerPlayNetworking.send(player, ScoutNetworking.ENABLE_SLOTS, packet);
}
ItemStack rightPouchStack = ScoutUtil.findBagItem(player, BagType.POUCH, true);
if (!rightPouchStack.isEmpty()) {
BaseBagItem bagItem = (BaseBagItem) rightPouchStack.getItem();
int slots = bagItem.getSlotCount();
DefaultedList<BagSlot> bagSlots = handler.scout$getRightPouchSlots();
for (int i = 0; i < slots; i++) {
BagSlot slot = bagSlots.get(i);
slot.setInventory(null);
slot.setEnabled(false);
}
PacketByteBuf packet = new PacketByteBuf(Unpooled.buffer());
packet.writeBoolean(false);
packet.writeInt(1);
packet.writeItemStack(rightPouchStack);
ServerPlayNetworking.send(player, ScoutNetworking.ENABLE_SLOTS, packet);
}
}
}
}