Les réformes
Table des matières
Gérer les comportements d'une Réforme :
Vue d'ensemble
Le Système de Réformes permet d'implémenter de nouvelles façons de jouer et d'établir ses stratégies dans le jeu.
Guide d'implémentation
Créer une nouvelle Réforme
Aller dans l'enum
Perks
: Il vous suffit d'ajouter une nouvelle Réforme. L'ID de la Réforme doit être unique à chaque Réforme !
NOM(
id,
nom,
description,
itemstack
type de perk
cooldown si PerksType.EVENT
)
id devra etre un int nom, un string description, une liste de components itemstack, un itemstack :
ItemStack.of(Material)
CustomItemRegistry.getByName("omc_items:aywenite").getBest(), un CustomItem d'ItemAdder type de perk, PerkEvent donc soit un BASIC et EVENT
Exemple d'une Réforme basique :
TNT_RAIN(
16,
"§e§lPluie de TNT",
List.of(
Component.text("§7Lorsque vous §3tapez un joueur§7, une tnt"),
Component.
text("§7apparaitra au dessus de lui et §3explosera §7!"),
),
ItemStack.of(Material.TNT),
PerkType.BASIC,
0
)
Exemple d'une Réforme événementielle :
IDYLLIC_RAIN(
14,
"§e§lPluie idyllique",
List.of(
Component.text("§7Fait apparaître de l'§3Aywenite §7dans votre ville pendant§3 1 §7min. §8(Cooldown : 1j)")
),
ItemStack.of(Material.GHAST_TEAR),
PerkType.EVENT,
24 * 60 * 60 * 1000L // 1 jour
),
Gérer les comportements d'une Réforme :
Réforme Basique
Faites une classe dans
mayor.perks.basic
, vous pourrez implementer Listener si votre Réforme peut être activée lorsqu'une telle chose se passeUtilisez
PerkManager.hasPerk(<City>.getMayor(), id)
afin de regarder si le Maire a choisit ce Perk et assurez vous que le Maire est dans sa phase d'applicationMayorManager.getInstance().phaseMayor==2
Exemple avec un Listener:
public class AyweniterPerk implements Listener {
private static final double DROP_CHANCE = 0.01; //1%
private final Random random = new Random();
@EventHandler
public void onBlockBreak(BlockBreakEvent event) {
Block block = event.getBlock();
Player player = event.getPlayer();
City playerCity = CityManager.getPlayerCity(player.getUniqueId());
if (MayorManager.getInstance().phaseMayor==2) {
if (!PerkManager.hasPerk(playerCity.getMayor(), Perks.AYWENITER.getId())) return;
if (block.getType() == Material.STONE) {
if (random.nextDouble() < DROP_CHANCE) {
ItemStack ayweniteItem = CustomItemRegistry.getByName("omc_items:aywenite").getBest();
ayweniteItem.setAmount(2);
player.getInventory().addItem(ayweniteItem);
player.playSound(player.getEyeLocation(), Sound.BLOCK_AMETHYST_BLOCK_RESONATE, 10.0F, 0.6F);
MessagesManager.sendMessage(player, Component.text("§8§o*la bénédiction!*"), Prefix.MAYOR, MessageType.INFO, false);
}
}
}
}
}
Il est aussi autorisé d'implementer un comportement différent dans le code du plugin
Exemple de la modfication des Intérêts :
import fr.openmc.core.features.city.mayor.perks.Perks;// Interests calculated as proportion not percentage (eg: 0.01 = 1%)
public double calculateCityInterest() {
double interest = .01; // base interest is 1%
if (MayorManager.getInstance().phaseMayor == 2) {
if (PerkManager.hasPerk(getMayor(), Perks.BUISNESS_MAN.getId())) {
interest = .03; // interest is 3% when perk Buisness Man actived
}
}
return interest;
}
Réforme Événementielle
Faites une classe dans
mayor.perks.event
, vous pourrez mettre les méthodes qui sont concernées par votre Réforme Evenementielle.Allez dans
city.menu.mayor.MayorLawMenu
, vous devrez ajouter la détection lorsque votre Réforme est activée par le Maire.
Exemple :
else if(PerkManager.hasPerk(city.getMayor(),Perks.MILITARY_DISSUASION.
getId())){
// Dissuasion Militaire (id : 13) - Perk Event
for (UUID uuid : city.getMembers()) {
Player member = Bukkit.getPlayer(uuid);
if (member == null || !member.isOnline()) continue;
MessagesManager.sendMessage(member, Component.text("Le §6Maire §fa déclenché la §eDissuasion Militaire §f!"), Prefix.MAYOR, MessageType.INFO, false);
}
MilitaryDissuasion.spawnIronMan(city, 10);
DynamicCooldownManager.use(city.getUUID(), "city:military_dissuasion", 10 * 60 * 1000L); // 10 minutes
DynamicCooldownManager.use(mayor.getUUID().toString(), "mayor:law-perk-event", PerkManager.getPerkEvent(mayor).getCooldown());
new BukkitRunnable() {
@Override
public void run() {
if (DynamicCooldownManager.isReady(city.getUUID(), "city:military_dissuasion")) {
MilitaryDissuasion.clearCityGolems(city);
this.cancel();
}
}
}.runTaskTimer(OMCPlugin.getInstance(), 20L, 100L);
}
DynamicCooldownManager.use(mayor.getUUID().toString(), "mayor:law-perk-event", PerkManager.getPerkEvent(mayor).getCooldown());
va donc appliquer le cooldown associé a la Réforme d'Event.
MilitaryDissuasion.spawnIronMan(city, 10);
DynamicCooldownManager.use(city.getUUID(), "city:military_dissuasion", 10 * 60 * 1000L); // 10 minutes
Les lignes ci dessus sont le corps de votre Réforme, ici on spawn 10 IronMan dans la ville. Et apres 10 minutes on les clear.
Bonnes pratiques
Nommage clair : Utilisez des noms et descriptions explicites pour les Réformes
Équilibrage de la Réforme : Assurez-vous que la Réforme n'est pas trop puissante, ou trop forte comparé à une autre
Documentation : Commentez votre code pour faciliter la maintenance
Style : Essayez au maximum de vous brancher sur les mêmes couleurs utilisées
Développé par iambibi_
Dernière mise à jour
Cet article vous a-t-il été utile ?