nie ma tu uzytych funkcji javy 8, takie rzeczy to tylko w javie 6 =/
co do reszty:
public UserManager getUserManager() {
if(this.userManager == null) this.userManager = new UserManager();
return this.userManager;
}
public CustomClassManager getCustomClassManager() {
if(this.customClassManager == null) this.customClassManager = new CustomClassManager();
return this.customClassManager;
}
gettery powinny zwracać od razu coś, no chyba, że to singleton czy coś, no a nie widze zebys ustawial gdzies te zmienne na null, wiec nie ma potrzeby nawet takiego sprawdzania, bo są inicjowane w konstruktorze (no i powinny byc rejestrowane w onenable, a nie w konstruktorze)
for(Entity entity : Bukkit.getWorld("world").getEntities()){
if(this.mobManager.isMob(entity.getCustomName()) && !(entity instanceof Player)){
((LivingEntity) entity).setHealth(0);
}
}
od razu mozesz uzyc getlivingentities, no i uzyc streamow =/
private final Map<String, List<String>> moreMessages = new HashMap<String, List<String>>();
mozesz zastapic to multimapą z guavy
ogólnie to jest tu dużo błędów, a kod wygląda nieestetycznie i słabe rozwiązania =/
public void save(Main main){
for(User user : main.getUserManager().userSet()){
if(user.isChanged()){
new FlatUser(user).save();
}
}
}
tworzysz obiekt tylko po to aby wykonać metode save, od razu w parametrze mozesz dostarczyc usermanager lub od razu liste, bo po co main skoro i tak nie uzywasz wiecej funkcji od niego.
nazwy zmiennych z małych liter, tak samo metod i pakietów, klasy z dużych liter.
for(String string : Messages.getInstance().getList("LevelUpMessage")) {
player.sendMessage(string
.replace("{LVL}", "" + this.getLevel())
.replace("{EXP}", "" + this.getExp())
.replace("{NEED}", "" + this.getNeed()));
}
yaml wspiera wielolinijkowe teksty, tzn.
message: "Pierwsza linia\nDruga linia" #musi być te " ", jest oczywiscie duzo wiecej sposobow na tworzenie takich tekstow, ale ten jest chyba najprostszy dla kogos kto tego nie ogarnia
i wtedy wysylasz to jako jedną wiadomość, do tego zamiast String#replace mozesz uzyc StringUtils.replace, ktore jest kilka razy szybsze.
no i tez czasem immutable tez by sie tu przydalo
edit:
no i oczywiscie tutaj flat ssie, do tego widze ze masz tutaj kilka obiektów, które używają metody np. save, mógłbyś pobawić sie z interfejsami lub dziedziczeniem, ładniej by wyszło