Is this better than doing a Singleton class?

Discussion in 'Plugin Development' started by OfficerDeveloper, Nov 23, 2017.

Thread Status:
Not open for further replies.
  1. Main (open)

    Code:
    package com.WDI.main;
    
    import org.bukkit.Bukkit;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import com.WDI.listeners.JoinEvent;
    import com.WDI.managers.ConfigManager;
    import com.WDI.managers.PacketManager;
    import com.WDI.managers.RoleManager;
    import com.WDI.utils.MessageUtil;
    
    public class WDI extends JavaPlugin {
    
        private ConfigManager configManager;
        private PacketManager packetManager;
        private MessageUtil messageUtil;
        private RoleManager roleManager;
    
        public void onEnable() {
    
            configManager = new ConfigManager(this);
            packetManager = new PacketManager(this);
            messageUtil = new MessageUtil(this);
            roleManager = new RoleManager(this);
           
            getConfigManager().setDefaults();
    
            registerEvents();
        }
    
        private void registerEvents() {
            Bukkit.getPluginManager().registerEvents(new JoinEvent(this), this);
        }
    
        public ConfigManager getConfigManager() {
            return configManager;
        }
    
        public PacketManager getPacketManager() {
            return packetManager;
        }
    
        public MessageUtil getMessageUtil() {
            return messageUtil;
        }
    
    }
    


    WDIListener Class (open)

    Code:
    package com.WDI.main;
    
    import org.bukkit.event.Listener;
    
    public class WDIListener implements Listener {
    
        protected WDI plugin;
    
        public WDIListener(WDI pl) {
            plugin = pl;
        }
    
    }
    


    Join Event (open)

    Code:
    package com.WDI.listeners;
    
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
    import org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result;
    import org.bukkit.event.player.PlayerJoinEvent;
    
    import com.WDI.game.GameState;
    import com.WDI.main.WDI;
    import com.WDI.main.WDIListener;
    
    public class JoinEvent extends WDIListener {
    
        public JoinEvent(WDI pl) {
            super(pl);
        }
    
        @EventHandler
        public void onJoin(PlayerJoinEvent e) {
    
            Player p = e.getPlayer();
    
            switch (GameState.getState()) {
    
            case LOBBY:
                e.setJoinMessage(plugin.getMessageUtil().msg("&2&l+&7" + p.getName(), false));
                break;
    
            case GAME:
                e.setJoinMessage(plugin.getMessageUtil().msg("&2&l+&7" + p.getName(), false));
                plugin.getMessageUtil().msg(p, "&4You have been set as a spectator - &4&lGAME STARTED", false);
                // Set person to spectator mode
                break;
    
            default:
                break;
    
            }
    
        }
    
        @EventHandler
        public void onPreLogin(AsyncPlayerPreLoginEvent e) {
    
            if (GameState.isState(GameState.RESTARTING))
                e.disallow(Result.KICK_OTHER,
                        plugin.getMessageUtil().msg("&4&lServer restarting... try again in a moment", true));
    
        }
    
    }
    


    If I need to use the main class inside of different object classes would this be better than doing a singleton class for each object? Inside of MessageUtil and ConfigManager those classes extend WDIListener so I can call plugin.whatever

    In my last attempt at this plugin, I remember getting the occasional NPE because of WDI not being accessible, just want to double check this will work in its pre-stages before making the whole plugin.
     
    Last edited: Nov 23, 2017
  2. Offline

    timtower Administrator Administrator Moderator

    @OfficerDeveloper This looks pretty good.
    Singletons are often implemented wrong. If you do that then you need to do it correct, and only have 1 singleton.
     
Thread Status:
Not open for further replies.

Share This Page