seppuku/src/main/java/me/rigamortis/seppuku/impl/module/player/ItemSpoofModule.java

101 lines
4.7 KiB
Java

package me.rigamortis.seppuku.impl.module.player;
import me.rigamortis.seppuku.api.event.EventStageable;
import me.rigamortis.seppuku.api.event.network.EventSendPacket;
import me.rigamortis.seppuku.api.module.Module;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.inventory.ClickType;
import net.minecraft.network.play.client.CPacketPlayerTryUseItem;
import net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock;
import net.minecraft.network.play.client.CPacketUseEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import team.stiff.pomelo.impl.annotated.handler.annotation.Listener;
/**
* Author Seth
* 5/2/2019 @ 4:39 AM.
*/
public final class ItemSpoofModule extends Module {
public BlockPos position;
public EnumFacing placedBlockDirection;
public EnumHand hand;
public float facingX;
public float facingY;
public float facingZ;
private boolean send;
private Entity entity;
public ItemSpoofModule() {
super("ItemSpoof", new String[]{"ItemS"}, "Allows you to display a different item server-side (Use the top left slot in your inventory)", "NONE", -1, ModuleType.PLAYER);
}
@Listener
public void sendPacket(EventSendPacket event) {
if (event.getStage() == EventStageable.EventStage.PRE) {
if (event.getPacket() instanceof CPacketPlayerTryUseItemOnBlock) {
if (send) {
send = false;
return;
}
final CPacketPlayerTryUseItemOnBlock packet = (CPacketPlayerTryUseItemOnBlock) event.getPacket();
this.position = packet.getPos();
this.placedBlockDirection = packet.getDirection();
this.hand = packet.getHand();
this.facingX = packet.getFacingX();
this.facingY = packet.getFacingY();
this.facingZ = packet.getFacingZ();
if (this.position != null) {
event.setCanceled(true);
final Minecraft mc = Minecraft.getMinecraft();
mc.playerController.windowClick(mc.player.inventoryContainer.windowId, 9, mc.player.inventory.currentItem, ClickType.SWAP, mc.player);
this.send = true;
mc.player.connection.sendPacket(new CPacketPlayerTryUseItemOnBlock(this.position, this.placedBlockDirection, this.hand, this.facingX, this.facingY, this.facingZ));
mc.playerController.windowClick(mc.player.inventoryContainer.windowId, 9, mc.player.inventory.currentItem, ClickType.SWAP, mc.player);
}
}
if (event.getPacket() instanceof CPacketPlayerTryUseItem) {
if (send) {
send = false;
return;
}
final CPacketPlayerTryUseItem packet = (CPacketPlayerTryUseItem) event.getPacket();
this.hand = packet.getHand();
if (this.hand != null) {
event.setCanceled(true);
final Minecraft mc = Minecraft.getMinecraft();
mc.playerController.windowClick(mc.player.inventoryContainer.windowId, 9, mc.player.inventory.currentItem, ClickType.SWAP, mc.player);
this.send = true;
mc.player.connection.sendPacket(new CPacketPlayerTryUseItem(this.hand));
mc.playerController.windowClick(mc.player.inventoryContainer.windowId, 9, mc.player.inventory.currentItem, ClickType.SWAP, mc.player);
}
}
if (event.getPacket() instanceof CPacketUseEntity) {
if (send) {
send = false;
return;
}
final CPacketUseEntity packet = (CPacketUseEntity) event.getPacket();
if (packet.getAction() == CPacketUseEntity.Action.ATTACK) {
final Minecraft mc = Minecraft.getMinecraft();
this.entity = packet.getEntityFromWorld(mc.world);
if (this.entity != null) {
event.setCanceled(true);
mc.playerController.windowClick(mc.player.inventoryContainer.windowId, 9, mc.player.inventory.currentItem, ClickType.SWAP, mc.player);
this.send = true;
mc.player.connection.sendPacket(new CPacketUseEntity(this.entity));
mc.playerController.windowClick(mc.player.inventoryContainer.windowId, 9, mc.player.inventory.currentItem, ClickType.SWAP, mc.player);
}
}
}
}
}
}