Plugin Pioche à Spawner (HELP)

  • Auteur de la discussion Auteur de la discussion CaadriFR
  • Date de début Date de début

CaadriFR

Aventurier
3 Février 2017
16
1
2
38
Bonjour, Bonsoir

Je suis un développeur apprenti, je ne suis pas encore à la hauteur de vous aider sur ce forum.

Aujourd'hui j'ai besoin d'aide pour un plugin assez particulier.

J'ai un serveur Pvp-Faction moddé. Sur mon serveur il y a une pioche à Spawner (Nouvel item)

J'ai repris le plugin Simple Spawner pour y ajouter l'Event de la pioche.

Voici le code :

@EventHandler
public void onPlayerMineSpawner(BlockBreakEvent evt)
{
if (!evt.getBlock().getType().equals(Material.MOB_SPAWNER)) {
return;
}
if (evt.getPlayer().getItemInHand().getType().getId() == 494)

{
CreatureSpawner s = (CreatureSpawner)evt.getBlock().getState();
s.getWorld().dropItem(s.getLocation(), Commands.getSpawnerItem(1, s.getSpawnedType()));
}
else {}
}
}

Il s'avère que tout marcher bien jusqu'ici, mais les joueurs de mon serveur ont rapidement trouver un bug de duplication.

Dans un claim enemies, la pioche ne se casse pas, le Spawner ne se casse pas, mais le spawner ce loot quand même ce qui est un très gros problème et les joueurs utilisaient cette technique pour avoir des stacks et des stacks de Spawners.

Comment pourrait-je faire pour vérifié que c'est dans un claim qui nous appartient ?

Merci pour toutes aides !
 
Bonjour, Bonsoir

Je suis un développeur apprenti, je ne suis pas encore à la hauteur de vous aider sur ce forum.

Aujourd'hui j'ai besoin d'aide pour un plugin assez particulier.

J'ai un serveur Pvp-Faction moddé. Sur mon serveur il y a une pioche à Spawner (Nouvel item)

J'ai repris le plugin Simple Spawner pour y ajouter l'Event de la pioche.

Voici le code :

@EventHandler
public void onPlayerMineSpawner(BlockBreakEvent evt)
{
if (!evt.getBlock().getType().equals(Material.MOB_SPAWNER)) {
return;
}
if (evt.getPlayer().getItemInHand().getType().getId() == 494)

{
CreatureSpawner s = (CreatureSpawner)evt.getBlock().getState();
s.getWorld().dropItem(s.getLocation(), Commands.getSpawnerItem(1, s.getSpawnedType()));
}
else {}
}
}

Il s'avère que tout marcher bien jusqu'ici, mais les joueurs de mon serveur ont rapidement trouver un bug de duplication.

Dans un claim enemies, la pioche ne se casse pas, le Spawner ne se casse pas, mais le spawner ce loot quand même ce qui est un très gros problème et les joueurs utilisaient cette technique pour avoir des stacks et des stacks de Spawners.

Comment pourrait-je faire pour vérifié que c'est dans un claim qui nous appartient ?

Merci pour toutes aides !
Salut,

une petite chose avant de te venir en aide: tu pourrait utilisez les balises CODE pour mettre en forme ton code car là c'est difficilement lisible :)

Ensuite, il va te falloir utilisez l'API Faction. Pour se faire:
  • rends toi sur le site de Faction & télécharge les versions adéquates de Faction et MassiveCore,
  • ensuite, tu les ajoute dans ton IDE (Sous Eclipse -> Properties -> Java Build path -> Add external Jar: et tu ajoute Faction & MassiveCore),
  • après, voici un code te permettant de récupérer un MPlayer (Joueur dans MasiveCore) et de récupérer sa faction ainsi que la faction au coordonnées auquel il se trouve:
Code:
//Ton joueur, par exemple moi je recupère le joueur 'DiscowZombie' (à savoir, moi)
Player player = Bukkit.getServer().getPlayer("DiscowZombie");
//On le transforme ensuite en MPlayer (Joueurs dans MassiveCore) de manière à pouvoir interagir avec lui: récupérer sa faction, ses infos, etc...
MPlayer mp = MPlayer.get(player);
//On récupère sa faction:
Faction fp = mp.getFaction();
//On récupère sa location dans le monde:
Location loc = player.getLocation();
//On récupère la faction à ses coordonnées:
Faction atLoc = BoardColl.get().getFactionAt(PS.valueOf(loc));
  • a présent, tu peut vérifier si le joueur est bien dans sa faction ;)

J’espère t'avoir aidé, si tu as encore des questions, n’hésite pas ! :)
 
Pas forcément besoin d'utiliser l'API de Faction.

En effet, il suffis de passer la priorité de ton événement au minimum, en gros il seras pris en charge tout en dernier. Après tu vérifies si celui-ci a été annulé, dans le cas présent il le seras si il y a un spawner dans un claim ennemie, si ça n'est pas le cas, alors on fait drop le spawner.
 
  • J'aime
Reactions: DiscowZombie
Pas forcément besoin d'utiliser l'API de Faction.

En effet, il suffis de passer la priorité de ton événement au minimum, en gros il seras pris en charge tout en dernier. Après tu vérifies si celui-ci a été annulé, dans le cas présent il le seras si il y a un spawner dans un claim ennemie, si ça n'est pas le cas, alors on fait drop le spawner.
ça marche aussi ;)