Recherche d'un Plugin nécessaire pour Serveur

ZeGamerak

Aventurier
16 Avril 2021
10
0
2
20
Bonjour ou bien Bonsoir,

Je développe depuis quelques temps un serveur Minecraft axé mini-jeux. Cependant un petit problème est présent et je n’ai aucunement réussi a trouver ce qu’il me fallait malgré mes nombreuses recherches.

Mon problème est donc le suivant, j’ai un mode de jeu Fallen Kingdom, cependant a la fin de chaque partie, j’aimerai que la Map, se remette a un stade d’origine, car après chaque partie la Map reste détruite, je suis donc obligé de la réactualisé manuellement, ce qui n’est franchement pas pratique du tout… Je suis donc a la recherche d’un Plugin ou d’une autre solution pour pouvoir faire cela automatiquement a chaque fin de partie :/

Merci d’avance a vous pour votre aide, en espérant que vous pourrez m’aider.
 

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
Bonjour !

Je ne connais pas ton niveau en informatique, mais j'ai plusieurs choses à te proposer. Je précise avant tout que je ne l'ai jamais fais avant. La première idée qui me traverse l'esprit, c'est de charger une schematic a la fin de chacune de tes parties. Bien qu'efficace, cette méthode demandera beaucoup de ressources si ta map est grande. Sinon il y'a ça : le plugin n'est plus maintenu depuis la 1.13, il faut donc le tester : [UNMAINTAINED] EasyMapReset | SpigotMC - High Performance Minecraft

Si tu as des connaissances en info, tu peux tenter l'une des solutions suivantes. Prends ta map et fais en une sauvegarde dans un coin. A la fin d'une partie, tu éteins le serveur usé et tu remplaces la map utilisée par la sauvegarde que tu viens de faire. L'autre option, plus poussée, serait de faire un container docker. C'est simple et efficace. Après la config, tu n'aurait plus rien à toucher ou presque. L'idée est de faire une image docker avec ta map neuve dedans. Pour chaque partie, tu lances un nouveau conteneur. A la fin de la partie, le conteneur est détruit. et rebelote pour la partie suivante. Là aussi, il y'a des limites. Si les ressources demandées sont trop importantes, le conteneur peut crash. Il faut voir comment l'intégrer à ton proxy Bungee, mais je pense que ce doit pouvoir être fait sans trop de soucis via api

Résumons : tu as le plugin pu maintenu (si jamais : https://lmgtfy.app/?q=spigot+plugin+reset+map), avoir une map que tu recopie à chaque fin de partie via un script, ou bien des conteneur docker. Si tu n'est pas avancé en informatique, pars bien sur sur la première option ;)

AlexFatta
 

ZeGamerak

Aventurier
16 Avril 2021
10
0
2
20
EDIT : Je suis navré pour ça, j'ai fait répondre au lieu d'éditer, j'ai pas fais gaffe sorry.
Merci
Bonjour !

Je ne connais pas ton niveau en informatique, mais j'ai plusieurs choses à te proposer. Je précise avant tout que je ne l'ai jamais fais avant. La première idée qui me traverse l'esprit, c'est de charger une schematic a la fin de chacune de tes parties. Bien qu'efficace, cette méthode demandera beaucoup de ressources si ta map est grande. Sinon il y'a ça : le plugin n'est plus maintenu depuis la 1.13, il faut donc le tester : [UNMAINTAINED] EasyMapReset | SpigotMC - High Performance Minecraft

Si tu as des connaissances en info, tu peux tenter l'une des solutions suivantes. Prends ta map et fais en une sauvegarde dans un coin. A la fin d'une partie, tu éteins le serveur usé et tu remplaces la map utilisée par la sauvegarde que tu viens de faire. L'autre option, plus poussée, serait de faire un container docker. C'est simple et efficace. Après la config, tu n'aurait plus rien à toucher ou presque. L'idée est de faire une image docker avec ta map neuve dedans. Pour chaque partie, tu lances un nouveau conteneur. A la fin de la partie, le conteneur est détruit. et rebelote pour la partie suivante. Là aussi, il y'a des limites. Si les ressources demandées sont trop importantes, le conteneur peut crash. Il faut voir comment l'intégrer à ton proxy Bungee, mais je pense que ce doit pouvoir être fait sans trop de soucis via api

Résumons : tu as le plugin pu maintenu (si jamais : https://lmgtfy.app/?q=spigot+plugin+reset+map), avoir une map que tu recopie à chaque fin de partie via un script, ou bien des conteneur docker. Si tu n'est pas avancé en informatique, pars bien sur sur la première option ;)

AlexFatta
Merci pour ta réponse, cependant pour un serveur Mini-Jeux qui tournera 24h/24 et 7j/7 ce ne sera pas très pratique de devoir relancer le serveur a chaque fin de partie, ma recherche étant de pouvoir trouver une solution pour que chaque fois qu'une partie se termine, la map se remette automatiquement a son état d'origine afin de permettre aux prochains joueurs de se connecté dessus et de pouvoir jouer, sans problèmes et quasiment instantanément, si je redémarre le serveur manuellement a chaque fois la map pourrait prendre plusieurs heures avant d'être re-disponible, car je ne pourrais pas toujours, relancer les serveurs où il y a les map :/
 

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
Bonsoir !

si je redémarre le serveur manuellement a chaque fois la map pourrait prendre plusieurs heures avant d'être re-disponible
Bien sûr, je suis d'accord avec toi. C'est pour ça que depuis, le script a été créé ;) Ce sont des commandes simples qui te permettront de gérer tout ça.

Tu lances ton serveur :
Bash:
./start.sh &
Le & a la fin va signifier de lancer ton serveur dans un process séparé. Tu peux aussi utiliser un logiciel comme "screen" qui gérera ca pour toi. La commande te retournera un truc du genre "[1234] process started successfully" je crois. C'est le [1234] qui nous intéresse, c'est le numéro du processus qui fait tourner ton serveur. Si le process s'arrête ou se fait tuer, ton serveur s'arrête. Lancer ton serveur ca va c'est facile. Le plus compliqué dans l'histoire, c'est de trouver comment l'arrêter et à quel moment. 2 options :

  • Soit tu as un plugin qui fait un /stop de ton serveur à la fin de la partie (et il s'arrête proprement, même pas besoin de tuer le processus).
  • Soit en mode bourrin tu kill le processus 1234 avec la commande "kill -9 1234".

Enfin, tu remet ta map à zéro en mettant ta map neuve a la place. :

Bash:
rm -R /chemin/du/serveur/<map_fk>

cp -R /chemin/vers/map/neuve /chemin/du/serveur

Puis tu relances le serveur comme vu au début du message via la commande ;)

Si tu as un seul serveur FK, la technique du process va très bien fonctionner. Tu n'auras qu'à stocker l'id du process quelque part (en base de données ou en variable même si c'est moins propre) pour le gérer. Quoi qu'il en soit, le best du best reste de tout gérer par plugin. Alors je sais, tu me diras "frérot c'est pour ça que je suis là, kilékon lui" sauf que je ne suis pas sur qu'un plugin aussi complet existe sur le marché publique. Pourquoi dont ? D'une part parce qu'une partie du plugin touche aux fichiers du la machine et ça les gens sont moyens chauds pour des raisons de sécurité, et d'autre part parce que ces systèmes sont utilisés par les plus grands serveurs. Ils codent eux même leurs plugins et ne les mettent en général pas en ligne pour des raisons évidentes de sécurité mais aussi pour des raisons commerciales (puis y'a un peu plus qu'un plugin et un script de 4 lignes sur leurs systèmes ;) )

Bien sur tout cela n'est que mon point de vue. Je serais le premier à reconnaitre mon erreur le cas contraire.

On résume :

Soit tu utilises l'id du processus utilisé par le serveur pour l'éteindre et changer ta map, soit via plugin ou commande block tu éteint ton serveur proprement.

Dans les deux cas, il te faudra un plugin ou un programme pour le lien entre ton serveur et ta machine et lancer les commandes pour copier ta map neuve. Eh oui, le jeu se déroule dans l'environnement Spigot et tous les évènements se passent dans ton serveur, ca ta machine elle est en sait rien. Idem pour le /stop, c'est à Spigot que tu envoies la commande, pas à la machine. Et après, la copie de la map neuve se passe sur ta machine. Tu as donc 2 environnements à gérer. Si tu as des compétences en Java, surement que tu dois pouvoir coder ça rapidement. Sinon un dev pourrait le faire. Je t'admet être une brelle en Java. Je sais coder la dessus mais mon code il pique les yeux xD Je met ça au hasard, mais peut être que @ShE3py ou @Detobel36 pourrait te donner 2-3 pistes à suivre pour coder cette partie là (et peut être même qu'ils auront le plugin qu'il te faut, mais je ne peux rien promettre). J'en profite aussi pour leur demander leur avis sur la question et sur les manières de faire. Est-ce correct selon vous ? Y'a-t-il meilleure manière de faire ou plus proprement (pour un serveur MC bien sur) ?

Voilà ! :D

AlexFatta
 
  • J'aime
Reactions: Ordwen

ZeGamerak

Aventurier
16 Avril 2021
10
0
2
20
Bonsoir !


Bien sûr, je suis d'accord avec toi. C'est pour ça que depuis, le script a été créé ;) Ce sont des commandes simples qui te permettront de gérer tout ça.

Tu lances ton serveur :
Bash:
./start.sh &
Le & a la fin va signifier de lancer ton serveur dans un process séparé. Tu peux aussi utiliser un logiciel comme "screen" qui gérera ca pour toi. La commande te retournera un truc du genre "[1234] process started successfully" je crois. C'est le [1234] qui nous intéresse, c'est le numéro du processus qui fait tourner ton serveur. Si le process s'arrête ou se fait tuer, ton serveur s'arrête. Lancer ton serveur ca va c'est facile. Le plus compliqué dans l'histoire, c'est de trouver comment l'arrêter et à quel moment. 2 options :

  • Soit tu as un plugin qui fait un /stop de ton serveur à la fin de la partie (et il s'arrête proprement, même pas besoin de tuer le processus).
  • Soit en mode bourrin tu kill le processus 1234 avec la commande "kill -9 1234".

Enfin, tu remet ta map à zéro en mettant ta map neuve a la place. :

Bash:
rm -R /chemin/du/serveur/<map_fk>

cp -R /chemin/vers/map/neuve /chemin/du/serveur

Puis tu relances le serveur comme vu au début du message via la commande ;)

Si tu as un seul serveur FK, la technique du process va très bien fonctionner. Tu n'auras qu'à stocker l'id du process quelque part (en base de données ou en variable même si c'est moins propre) pour le gérer. Quoi qu'il en soit, le best du best reste de tout gérer par plugin. Alors je sais, tu me diras "frérot c'est pour ça que je suis là, kilékon lui" sauf que je ne suis pas sur qu'un plugin aussi complet existe sur le marché publique. Pourquoi dont ? D'une part parce qu'une partie du plugin touche aux fichiers du la machine et ça les gens sont moyens chauds pour des raisons de sécurité, et d'autre part parce que ces systèmes sont utilisés par les plus grands serveurs. Ils codent eux même leurs plugins et ne les mettent en général pas en ligne pour des raisons évidentes de sécurité mais aussi pour des raisons commerciales (puis y'a un peu plus qu'un plugin et un script de 4 lignes sur leurs systèmes ;) )

Bien sur tout cela n'est que mon point de vue. Je serais le premier à reconnaitre mon erreur le cas contraire.

On résume :

Soit tu utilises l'id du processus utilisé par le serveur pour l'éteindre et changer ta map, soit via plugin ou commande block tu éteint ton serveur proprement.

Dans les deux cas, il te faudra un plugin ou un programme pour le lien entre ton serveur et ta machine et lancer les commandes pour copier ta map neuve. Eh oui, le jeu se déroule dans l'environnement Spigot et tous les évènements se passent dans ton serveur, ca ta machine elle est en sait rien. Idem pour le /stop, c'est à Spigot que tu envoies la commande, pas à la machine. Et après, la copie de la map neuve se passe sur ta machine. Tu as donc 2 environnements à gérer. Si tu as des compétences en Java, surement que tu dois pouvoir coder ça rapidement. Sinon un dev pourrait le faire. Je t'admet être une brelle en Java. Je sais coder la dessus mais mon code il pique les yeux xD Je met ça au hasard, mais peut être que @ShE3py ou @Detobel36 pourrait te donner 2-3 pistes à suivre pour coder cette partie là (et peut être même qu'ils auront le plugin qu'il te faut, mais je ne peux rien promettre). J'en profite aussi pour leur demander leur avis sur la question et sur les manières de faire. Est-ce correct selon vous ? Y'a-t-il meilleure manière de faire ou plus proprement (pour un serveur MC bien sur) ?

Voilà ! :D

AlexFatta
Merci pour les informations ca a l'air assez compliqué tout ça x) En gros faudrait que j'apprenne le java ^^' Car je n'ai malheureusement pas les moyens de payer un dev pour un plugin :/ Et pour le script je pense pas être assez doué pour le faire :c Je suis vraiment pas doué.....
 
Dernière édition:

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
Bonsoir !

Les dev sur ce forum ont l'obligation d'être gratuits (si ils se proposent sur le forum bien sur).

ca a l'air assez compliqué tout ça
C'est pas compliqué mais n'importe qui ne peut pas improviser le système en effet. Mais si tu es à l'aise avec la gestion des systèmes ou des infrastructures ca passes ;) Bref. On va attendre la réponse de Detobel ou de ShE3py pour connaitre leur avis sur la question et aviser ensuite ;) Tu as deja check je suppose si un plugin de ce style là existait deja ?

AlexFatta
 

ZeGamerak

Aventurier
16 Avril 2021
10
0
2
20
Bonsoir !

Les dev sur ce forum ont l'obligation d'être gratuits (si ils se proposent sur le forum bien sur).


C'est pas compliqué mais n'importe qui ne peut pas improviser le système en effet. Mais si tu es à l'aise avec la gestion des systèmes ou des infrastructures ca passes ;) Bref. On va attendre la réponse de Detobel ou de ShE3py pour connaitre leur avis sur la question et aviser ensuite ;) Tu as deja check je suppose si un plugin de ce style là existait deja ?

AlexFatta
Effectivement j'ai deja check, ca fais plusieurs mois que je me renseigne et j'ai jamais trouver de solution ^^' J'ai vraiment encore beaucoup de progrès a faire de la domaine de la programmation je crois xD En tout cas c'est vraiment gentil de m'aider :D
 

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 087
157
456
247
21
Mìlhüsa
Bonsoir,

En soit il y a deux moyens pour changer une map :
  • Soit lorsque la map est chargée (et donc en mémoire) ;
  • Soit lorsque la map n'est pas chargée (et donc sur le disque dur).
Le plus simple et le plus rapide à faire est le second, et de toute façon pour ce que tu veux faire le premier moyen serait inutilement complexe.
L'idée est de simplement copier un dossier contenant la map vierge vers un nouveau dossier, et là tu as encore deux choix :
  • Soit copier le dossier (« map_vierge/ ») vers un unique dossier (« map/ »), tu ne pourras donc avoir qu'une seule partie en même temps ;
  • Soit copier le dossier (« map_vierge/ ») vers plusieurs dossiers (« map_1/ », « map_2/ », ...), tu pourras donc avoir une infinité de parties en même temps.
Le deuxième cas complexifie un peu le système, mais si tu veux un serveur mini-jeux c'est un peu ça qu'il faut faire.

Maintenant, si tu veux simplement maintenir la map dans un état antérieur, tu peux aussi faire sans la copie entre chaque partie ;
  1. Désactiver la sauvegarde automatique de la map ;
  2. Une fois la partie terminée, décharger la map sans la sauvegarder ;
  3. Recharger la map. La dernière sauvegarde en date sera ta map vierge.
Si la map est très lourde, cela évitera de copier le dossier tout entier, et évitera des écritures sur le disque qui ne serviront à rien parce que dans tous les cas dans une vingtaine de minutes la map sera reset. Niveau espace disque il faudra toujours un dossier « map_vierge/ » au cas où, et un dossier par map (l'on pourrait gruger un peu pour économiser l'espace disque en utilisant et en créant plusieurs mondes à partir d'un seul dossier, mais la mémoire utilisée serait la même que si on avait plusieurs dossiers, c'est assez compliqué à faire et je suppose que tu n'as pas vraiment de problème niveau espace disque restant).
Cependant si jamais le serveur crash ou que tu l'éteins, toutes les parties seront perdues (pas de sauvegarde), donc ça dépend des mini-jeux.


Le vrai problème est surtout de comment lancer automatiquement la réinitialisation de la map. Il faut détecter la fin de partie, or cela dépend uniquement du plugin de Fallen Kingdom que tu utilises.
Donc là encore deux possibilités :
  • Soit le plugin permet à d'autres plugins de détecter la fin de partie, dans ce cas tout est pour le mieux dans le meilleur des mondes possibles ;
  • Soit le plugin ne permet pas à d'autres plugins de détecter la fin de partie, auquel cas il faut s'injecter dans ledit plugin, ça marche plutôt bien mais ce n'est pas très esthétique et ça demande un assez bon niveau de programmation (rétro-ingénierie), sans compter que si le plugin est offusqué c'est un peu mort.
Cela dépendra aussi du plugin que tu utilises pour avoir plusieurs mondes, sachant qu'il a certainement déjà une commande pour copier un monde.

Pour répondre un peu à @Alex Fatta, le serveur n'a pas forcément besoin d'être arrêté, il suffit que le monde soit déchargé, et comme dit il faut un plugin si tu veux réinitialiser la map proprement.

Soit en mode bourrin tu kill le processus 1234 avec la commande "kill -9 1234".
1618715866969.png


Cordialement,
ShE3py
 
  • J'aime
Reactions: Alex Fatta

ZeGamerak

Aventurier
16 Avril 2021
10
0
2
20
Bonsoir,

En soit il y a deux moyens pour changer une map :
  • Soit lorsque la map est chargée (et donc en mémoire) ;
  • Soit lorsque la map n'est pas chargée (et donc sur le disque dur).
Le plus simple et le plus rapide à faire est le second, et de toute façon pour ce que tu veux faire le premier moyen serait inutilement complexe.
L'idée est de simplement copier un dossier contenant la map vierge vers un nouveau dossier, et là tu as encore deux choix :
  • Soit copier le dossier (« map_vierge/ ») vers un unique dossier (« map/ »), tu ne pourras donc avoir qu'une seule partie en même temps ;
  • Soit copier le dossier (« map_vierge/ ») vers plusieurs dossiers (« map_1/ », « map_2/ », ...), tu pourras donc avoir une infinité de parties en même temps.
Le deuxième cas complexifie un peu le système, mais si tu veux un serveur mini-jeux c'est un peu ça qu'il faut faire.

Maintenant, si tu veux simplement maintenir la map dans un état antérieur, tu peux aussi faire sans la copie entre chaque partie ;
  1. Désactiver la sauvegarde automatique de la map ;
  2. Une fois la partie terminée, décharger la map sans la sauvegarder ;
  3. Recharger la map. La dernière sauvegarde en date sera ta map vierge.
Si la map est très lourde, cela évitera de copier le dossier tout entier, et évitera des écritures sur le disque qui ne serviront à rien parce que dans tous les cas dans une vingtaine de minutes la map sera reset. Niveau espace disque il faudra toujours un dossier « map_vierge/ » au cas où, et un dossier par map (l'on pourrait gruger un peu pour économiser l'espace disque en utilisant et en créant plusieurs mondes à partir d'un seul dossier, mais la mémoire utilisée serait la même que si on avait plusieurs dossiers, c'est assez compliqué à faire et je suppose que tu n'as pas vraiment de problème niveau espace disque restant).
Cependant si jamais le serveur crash ou que tu l'éteins, toutes les parties seront perdues (pas de sauvegarde), donc ça dépend des mini-jeux.


Le vrai problème est surtout de comment lancer automatiquement la réinitialisation de la map. Il faut détecter la fin de partie, or cela dépend uniquement du plugin de Fallen Kingdom que tu utilises.
Donc là encore deux possibilités :
  • Soit le plugin permet à d'autres plugins de détecter la fin de partie, dans ce cas tout est pour le mieux dans le meilleur des mondes possibles ;
  • Soit le plugin ne permet pas à d'autres plugins de détecter la fin de partie, auquel cas il faut s'injecter dans ledit plugin, ça marche plutôt bien mais ce n'est pas très esthétique et ça demande un assez bon niveau de programmation (rétro-ingénierie), sans compter que si le plugin est offusqué c'est un peu mort.
Cela dépendra aussi du plugin que tu utilises pour avoir plusieurs mondes, sachant qu'il a certainement déjà une commande pour copier un monde.

Pour répondre un peu à @Alex Fatta, le serveur n'a pas forcément besoin d'être arrêté, il suffit que le monde soit déchargé, et comme dit il faut un plugin si tu veux réinitialiser la map proprement.


Voir la pièce jointe 93101

Cordialement,
ShE3py
J'y comprend rien :/ Je pensais pas aussi complexe que cela, de juste faire ça, surtout en vu du nombre de serveurs qui font cela ^^' Je vais jamais arriver a mettre en place ce que je veux faire.. TwT

Tu peux utiliser l’API de World Edit.
Tu place un schematic a une certaine position la première fois, et tu le remet à la fin de ta partie.
J’ai trouvé ça:
Cependant il y a toujours le problème de l'aumatisme :/
 
Dernière édition par un modérateur: