Solved Casting and extending CraftPlayer

Discussion in 'Plugin Development' started by Rufus5, Jul 14, 2016.

Thread Status:
Not open for further replies.
  1. Offline

    Rufus5

    So, I have a class called CraftanPlayer, because I would like to easily get more data about players from my server such as ranks, etc. CraftanPlayer extends CraftPlayer, but when I try to cast event.getPlayer() to CraftanPlayer I get a ClassCastException. Help?

    Code:
    public class CraftanPlayer extends CraftPlayer
    {
        public CraftanPlayer(CraftServer server, EntityPlayer entity)
        {
            super(server, entity);
            // TODO Auto-generated constructor stub
        }
    Code:
        @EventHandler(priority = EventPriority.LOW)
        public void onCommand(PlayerCommandPreprocessEvent event) {
            CraftanPlayer player = (CraftanPlayer) event.getPlayer();
     
  2. Offline

    Zombie_Striker

    @Rufus5
    You can't just make up new objects and try casting other objects to it. Right now, there will be now way to turn the player into your "craftanPlayer". However, using Maps you can link a player (or better yet, his UUID) to a CraftanPlayer instance, allowing you to get a CraftanPlayer instance by providing the player's UUID.
     
  3. Offline

    Rufus5

    You mean like storing a HashMap and linking every player to a new CraftanPlayer on join? I tried that and when I try to create a new CraftanPlayer I have to cast event.getPlayer() to a CraftanPlayer and I get the same ClassCastException.
     
  4. Offline

    Zombie_Striker

    @Rufus5
    Post the errors and what you have tried.
     
  5. Offline

    Rufus5

    Updated my old post to further explain, but here's my code and errors.

    Code:
    public static HashMap<Player, CraftanPlayer> players = new HashMap<Player, CraftanPlayer>();
    Code:
    @EventHandler
        public void onJoin(PlayerJoinEvent e){
            CoreMain.players.put(e.getPlayer(), new CraftanPlayer((CraftServer) e.getPlayer().getServer() , (EntityPlayer) e.getPlayer()));
        }
    The error:
    Code:
    Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer cannot be cast to net.minecraft.server.v1_10_R1.EntityPlayer at net.craftan.core.event.JoinEvent.onJoin<JoinEvent.java:17> ~[?:?]
    My way of getting the linked CraftanPlayers:

    Code:
    CraftanPlayer player = CoreMain.players.get(event.getPlayer());
     
  6. Offline

    Zombie_Striker

    @Rufus5
    Your problem is that you are casting a CraftPlayer to an EntityPlayer. e.getPlayer() does not return a CraftPlayer instance. Either find an object that is a instance of CraftPlayer, or make sure CraftanPlayer does not extend CraftPlayer and remove those parameters from the constructor.
     
    bwfcwalshy likes this.
  7. Offline

    Rufus5

    Thank you, I fixed it.
     
Thread Status:
Not open for further replies.

Share This Page