Add spell quick access keys
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
package electroblob.wizardry.packet;
|
||||
|
||||
import electroblob.wizardry.item.ISpellCastingItem;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
|
||||
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
|
||||
|
||||
/** <b>[Client -> Server]</b> This packet is for the spell quick access keys. */
|
||||
public class PacketSpellQuickAccess implements IMessageHandler<PacketSpellQuickAccess.Message, IMessage> {
|
||||
|
||||
@Override
|
||||
public IMessage onMessage(Message message, MessageContext ctx){
|
||||
|
||||
// Just to make sure that the side is correct
|
||||
if(ctx.side.isServer()){
|
||||
|
||||
final EntityPlayerMP player = ctx.getServerHandler().player;
|
||||
|
||||
player.getServerWorld().addScheduledTask(() -> {
|
||||
|
||||
ItemStack wand = player.getHeldItemMainhand();
|
||||
|
||||
if(!(wand.getItem() instanceof ISpellCastingItem)){
|
||||
wand = player.getHeldItemOffhand();
|
||||
}
|
||||
|
||||
if(wand.getItem() instanceof ISpellCastingItem){
|
||||
|
||||
((ISpellCastingItem)wand.getItem()).selectSpell(wand, message.index);
|
||||
// This line fixes the bug with continuous spells casting when they shouldn't be
|
||||
player.stopActiveHand();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static class Message implements IMessage {
|
||||
|
||||
private int index;
|
||||
|
||||
// This constructor is required otherwise you'll get errors (used somewhere in fml through reflection)
|
||||
public Message(){
|
||||
}
|
||||
|
||||
public Message(int index){
|
||||
this.index = index;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fromBytes(ByteBuf buf){
|
||||
// The order is important
|
||||
this.index = buf.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toBytes(ByteBuf buf){
|
||||
buf.writeInt(index);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,25 +13,26 @@ public class WizardryPacketHandler {
|
||||
|
||||
public static void initPackets(){
|
||||
net = NetworkRegistry.INSTANCE.newSimpleChannel(Wizardry.MODID.toUpperCase());
|
||||
registerMessage(PacketControlInput.class, PacketControlInput.Message.class);
|
||||
registerMessage(PacketCastSpell.class, PacketCastSpell.Message.class);
|
||||
registerMessage(PacketTransportation.class, PacketTransportation.Message.class);
|
||||
registerMessage(PacketPlayerSync.class, PacketPlayerSync.Message.class);
|
||||
registerMessage(PacketGlyphData.class, PacketGlyphData.Message.class);
|
||||
registerMessage(PacketCastContinuousSpell.class, PacketCastContinuousSpell.Message.class);
|
||||
registerMessage(PacketClairvoyance.class, PacketClairvoyance.Message.class);
|
||||
registerMessage(PacketSyncSettings.class, PacketSyncSettings.Message.class);
|
||||
registerMessage(PacketNPCCastSpell.class, PacketNPCCastSpell.Message.class);
|
||||
registerMessage(PacketDispenserCastSpell.class, PacketDispenserCastSpell.Message.class);
|
||||
registerMessage(PacketSpellProperties.class, PacketSpellProperties.Message.class);
|
||||
registerMessage(PacketSyncAdvancements.class, PacketSyncAdvancements.Message.class);
|
||||
registerMessage(PacketControlInput.class, PacketControlInput.Message.class);
|
||||
registerMessage(PacketCastSpell.class, PacketCastSpell.Message.class);
|
||||
registerMessage(PacketTransportation.class, PacketTransportation.Message.class);
|
||||
registerMessage(PacketPlayerSync.class, PacketPlayerSync.Message.class);
|
||||
registerMessage(PacketGlyphData.class, PacketGlyphData.Message.class);
|
||||
registerMessage(PacketCastContinuousSpell.class, PacketCastContinuousSpell.Message.class);
|
||||
registerMessage(PacketClairvoyance.class, PacketClairvoyance.Message.class);
|
||||
registerMessage(PacketSyncSettings.class, PacketSyncSettings.Message.class);
|
||||
registerMessage(PacketNPCCastSpell.class, PacketNPCCastSpell.Message.class);
|
||||
registerMessage(PacketDispenserCastSpell.class, PacketDispenserCastSpell.Message.class);
|
||||
registerMessage(PacketSpellProperties.class, PacketSpellProperties.Message.class);
|
||||
registerMessage(PacketSyncAdvancements.class, PacketSyncAdvancements.Message.class);
|
||||
registerMessage(PacketRequestAdvancementSync.class, PacketRequestAdvancementSync.Message.class);
|
||||
registerMessage(PacketResurrection.class, PacketResurrection.Message.class);
|
||||
registerMessage(PacketCastSpellAtPos.class, PacketCastSpellAtPos.Message.class);
|
||||
registerMessage(PacketEmitterData.class, PacketEmitterData.Message.class);
|
||||
registerMessage(PacketPossession.class, PacketPossession.Message.class);
|
||||
registerMessage(PacketConquerShrine.class, PacketConquerShrine.Message.class);
|
||||
registerMessage(PacketLectern.class, PacketLectern.Message.class);
|
||||
registerMessage(PacketResurrection.class, PacketResurrection.Message.class);
|
||||
registerMessage(PacketCastSpellAtPos.class, PacketCastSpellAtPos.Message.class);
|
||||
registerMessage(PacketEmitterData.class, PacketEmitterData.Message.class);
|
||||
registerMessage(PacketPossession.class, PacketPossession.Message.class);
|
||||
registerMessage(PacketConquerShrine.class, PacketConquerShrine.Message.class);
|
||||
registerMessage(PacketLectern.class, PacketLectern.Message.class);
|
||||
registerMessage(PacketSpellQuickAccess.class, PacketSpellQuickAccess.Message.class);
|
||||
}
|
||||
|
||||
private static int nextPacketId = 0;
|
||||
|
||||
Reference in New Issue
Block a user