Ir para conteúdo

Como criar um Plugin KitPvP


Guest PSminKoGamerDev

Posts Recomendados

Guest PSminKoGamerDev

Ola pessoal. Vim aqui porque a um tempo eu to encinando a criar um plugin de KitPvP no meu canal em 2 semanas ja postei 11 videos sposto 1 video por dia menos Sabado e Domingo. Alguns videos meus chega a ter 1 Hora e a maioria é de 30 minutos pois eu ensino muito bem os codigos falo oq ele faz porque ele faz isso porque aquele codigo nao faz isso.Ja ensinei os Kits PvP,Stomper,Kangaroo,Fisherman,Viper,Snail os comandos /admin,/build,/clearchat,/Spawn,/kit e entre outros encinei KitSelector,PlacaDeSopa,PlacadeRecraft,SopaRegenerar,Drop,Fome.Warps,ConfigPadrao,ConfigPersonalizada,Eventos em Geral...

o Link do video esta aqui https://www.youtube.com/watch?v=e39oheIbVsA

 

kq3HauM.png
 
2jx6wv3.png
 
QYLELXj.png
 
HWrA43P.png
 
WEYgrRj.png
 
O8iUAcZ.png
 
CBgDhmf.png
 
gIZbljC.png
 
tTIDsfl.png
 
zl8xBgE.png
Editado por PSminKoGamerDev
Link para o comentário
Compartilhar em outros sites

Guest PSminKoGamerDev

Cara, não é só com você o bagui mais porque todo mundo que faz tutorial de kitpvp usa ArrayList, não usa objetos, namoral é uma burrice isso ao meu ver.

Quem disse que eu usso ArrayList eu encino como HashMap e sou enum

Link para o comentário
Compartilhar em outros sites

Um pouco desorganizado...

 

Você poderia usar interfaces para optimizar o código... Não ir criando um eventhandler para cada classe...

 

Tava sem o que fazer, então escrevi um código (com alguns erros, foi sem ajuda de nada), só para ter uma ideia, de como poderia melhorar...

 

 

 

public abstract class KitBase
{
   private final String id; //Só para mais tarde, para organizar os kits que os players tem...
   private final KitType type; //vou usar enum, mas não vou criar ele aqui, é só um exemplo
   private final double cost; //só uma dica de algo que pode ser utilizado...


   public KitBase(String id, KitType type, double cost)
   {
      this.id = id;
      this.type = type;
      this.cost = cost;
   }

   public String getId()
   {
      return this.id;
   }

   public KitType getType()
   {
      return this.type;
   }

   public double getCost()
   {
      return this.cost;
   }

   public abstract void giveItems(Player player);
}

Agora que criamos a base, podemos criar um kit...

public class KitTanker extends KitBase implements VictimDMGModifier
{
   public KitTanker()
   {
      super("tanker",KitType.TANKER,25000);
   }

   @Override
   public void giveItems(Player player)
   {
      //dar os itens...
   }

   @Override
   public double damage(double realDamage)
   {
      return (realDamage / 1.2D);
   }
}
public class KitManager implements Listener
{
   private HashMap<Player,KitBase> kitPlayer;
   private List<KitBase> kits;
   private KitData kitData;

   public KitManager(KitData kidData)
   {
      kitPlayer = new HashMap();
      kits = new ArrayList();
      kits.addAll(kitData.loadAllKits());
   }

   public KitBase getKitBase(String kitId)
   {
      Iterator<KitBase> i = kits.iterator();
      while(i.hasNext())
      {
          KitBase kit = i.next();
          if(kit.getId().equals(kitId)
          {
             return kit;
          }
      }
      return null;
   }

   public void setPlayerKit(Player player, String kitId)
   {
      KitBase kit = getKitBase(kitId);
      if(kit == null)
      { 
         return;
      }
      if(kitPlayer.containsKey(player)
      {
         kitPlayer.remove(player);
         // tem que melhorar isso, talvez de uma ConcurrentModificationException '-'
      }
      kitPlayer.put(player,kit);
   }
}

@EventHandler
public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent e)
{
   if(!(e.getDamager() instanceof Player && e.getEntity() instanceof Player))
   {
      //verifique também se o damager não é instanceof Arrow... Mas não vou fazer isso agora...
      return;
   }

   Player damager = (Player) e.getDamager();
   Player victim = (Player) e.getEntity();
   KitBase damagerKit = kitPlayer.get(damager);
   KitBase victimKit = kitPlayer.get(victim);
   
   if(damagerKit instanceof DamagerDMGModifier)
   {
      e.setDamage((DamagerDMGModifier) damagerKit).damage(e.getDamage()));
   }

   if(vicctimKit instanceof VictimDMGModifier)
   {
      e.setDamage((VictimDMGModifier) victimKit).damage(e.getDamage()));
   }
} 

 

 

Editado por Manolo8
Link para o comentário
Compartilhar em outros sites

Guest PSminKoGamerDev

Um pouco desorganizado...

 

Você poderia usar interfaces para optimizar o código... Não ir criando um eventhandler para cada classe...

 

Tava sem o que fazer, então escrevi um código (com alguns erros, foi sem ajuda de nada), só para ter uma ideia, de como poderia melhorar...

 

 

 

public abstract class KitBase
{
   private final String id; //Só para mais tarde, para organizar os kits que os players tem...
   private final KitType type; //vou usar enum, mas não vou criar ele aqui, é só um exemplo
   private final double cost; //só uma dica de algo que pode ser utilizado...


   public KitBase(String id, KitType type, double cost)
   {
      this.id = id;
      this.type = type;
      this.cost = cost;
   }

   public String getId()
   {
      return this.id;
   }

   public KitType getType()
   {
      return this.type;
   }

   public double getCost()
   {
      return this.cost;
   }

   public abstract void giveItems(Player player);
}

Agora que criamos a base, podemos criar um kit...

public class KitTanker extends KitBase implements VictimDMGModifier
{
   public KitTanker()
   {
      super("tanker",KitType.TANKER,25000);
   }

   @Override
   public void giveItems(Player player)
   {
      //dar os itens...
   }

   @Override
   public double damage(double realDamage)
   {
      return (realDamage / 1.2D);
   }
}
public class KitManager implements Listener
{
   private HashMap<Player,KitBase> kitPlayer;
   private List<KitBase> kits;
   private KitData kitData;

   public KitManager(KitData kidData)
   {
      kitPlayer = new HashMap();
      kits = new ArrayList();
      kits.addAll(kitData.loadAllKits());
   }

   public KitBase getKitBase(String kitId)
   {
      Iterator<KitBase> i = kits.iterator();
      while(i.hasNext())
      {
          KitBase kit = i.next();
          if(kit.getId().equals(kitId)
          {
             return kit;
          }
      }
      return null;
   }

   public void setPlayerKit(Player player, String kitId)
   {
      KitBase kit = getKitBase(kitId);
      if(kit == null)
      { 
         return;
      }
      if(kitPlayer.containsKey(player)
      {
         kitPlayer.remove(player);
         // tem que melhorar isso, talvez de uma ConcurrentModificationException '-'
      }
      kitPlayer.put(player,kit);
   }
}

@EventHandler
public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent e)
{
   if(!(e.getDamager() instanceof Player && e.getEntity() instanceof Player))
   {
      //verifique também se o damager não é instanceof Arrow... Mas não vou fazer isso agora...
      return;
   }

   Player damager = (Player) e.getDamager();
   Player victim = (Player) e.getEntity();
   KitBase damagerKit = kitPlayer.get(damager);
   KitBase victimKit = kitPlayer.get(victim);
   
   if(damagerKit instanceof DamagerDMGModifier)
   {
      e.setDamage((DamagerDMGModifier) damagerKit).damage(e.getDamage()));
   }

   if(vicctimKit instanceof VictimDMGModifier)
   {
      e.setDamage((VictimDMGModifier) victimKit).damage(e.getDamage()));
   }
} 

 

 

Estou encinando o pessoal Interfaces separadas s é melhor mas iria ficar muito confusso para eles se for fazendo assim da pra entender Tudo.

Link para o comentário
Compartilhar em outros sites

Oi criatividade

 

Um pouco desorganizado...

 

Você poderia usar interfaces para optimizar o código... Não ir criando um eventhandler para cada classe...

 

Tava sem o que fazer, então escrevi um código (com alguns erros, foi sem ajuda de nada), só para ter uma ideia, de como poderia melhorar...

 

 

 

public abstract class KitBase
{
   private final String id; //Só para mais tarde, para organizar os kits que os players tem...
   private final KitType type; //vou usar enum, mas não vou criar ele aqui, é só um exemplo
   private final double cost; //só uma dica de algo que pode ser utilizado...


   public KitBase(String id, KitType type, double cost)
   {
      this.id = id;
      this.type = type;
      this.cost = cost;
   }

   public String getId()
   {
      return this.id;
   }

   public KitType getType()
   {
      return this.type;
   }

   public double getCost()
   {
      return this.cost;
   }

   public abstract void giveItems(Player player);
}

Agora que criamos a base, podemos criar um kit...

public class KitTanker extends KitBase implements VictimDMGModifier
{
   public KitTanker()
   {
      super("tanker",KitType.TANKER,25000);
   }

   @Override
   public void giveItems(Player player)
   {
      //dar os itens...
   }

   @Override
   public double damage(double realDamage)
   {
      return (realDamage / 1.2D);
   }
}
public class KitManager implements Listener
{
   private HashMap<Player,KitBase> kitPlayer;
   private List<KitBase> kits;
   private KitData kitData;

   public KitManager(KitData kidData)
   {
      kitPlayer = new HashMap();
      kits = new ArrayList();
      kits.addAll(kitData.loadAllKits());
   }

   public KitBase getKitBase(String kitId)
   {
      Iterator<KitBase> i = kits.iterator();
      while(i.hasNext())
      {
          KitBase kit = i.next();
          if(kit.getId().equals(kitId)
          {
             return kit;
          }
      }
      return null;
   }

   public void setPlayerKit(Player player, String kitId)
   {
      KitBase kit = getKitBase(kitId);
      if(kit == null)
      { 
         return;
      }
      if(kitPlayer.containsKey(player)
      {
         kitPlayer.remove(player);
         // tem que melhorar isso, talvez de uma ConcurrentModificationException '-'
      }
      kitPlayer.put(player,kit);
   }
}

@EventHandler
public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent e)
{
   if(!(e.getDamager() instanceof Player && e.getEntity() instanceof Player))
   {
      //verifique também se o damager não é instanceof Arrow... Mas não vou fazer isso agora...
      return;
   }

   Player damager = (Player) e.getDamager();
   Player victim = (Player) e.getEntity();
   KitBase damagerKit = kitPlayer.get(damager);
   KitBase victimKit = kitPlayer.get(victim);
   
   if(damagerKit instanceof DamagerDMGModifier)
   {
      e.setDamage((DamagerDMGModifier) damagerKit).damage(e.getDamage()));
   }

   if(vicctimKit instanceof VictimDMGModifier)
   {
      e.setDamage((VictimDMGModifier) victimKit).damage(e.getDamage()));
   }
} 

 

 

Como se ele soubesse 20% do que esse code faz, kkkj

Link para o comentário
Compartilhar em outros sites

Participe da Conversa

Você pode postar agora e se cadastrar mais tarde. Se você tiver uma conta, a class='ipsType_brandedLink' href='https://gamersboard.com.br/login/' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title='Sign In Now'>acesse agora para postar com sua conta.
Observação: sua postagem exigirá aprovação do moderador antes de ficar visível.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.

Processando...
×
×
  • Criar Novo...