Add spell quick access keys

This commit is contained in:
Electroblob77
2020-04-18 21:45:01 +01:00
parent ed63704184
commit f0752317e6
9 changed files with 175 additions and 18 deletions
@@ -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;