Plugin Résolu [Java] Empecher de poser des Bloc près d'un lit

MomoLeFr69

Architecte en herbe
8 Août 2018
83
3
56
18
Salutation, je suis entrain de coder un plugin, et je suis incapable de fournir/trouver un code pour parvenir à empêcher aux joueurs de poser des bloc près d'un lit, je suis dev à niveau débutant, donc comprenez que je n'y arrive pas, j'ai empêcher les joueurs de casser les lits pour qu'ils se cassent uniquement aux explosions.

Donc pour le BlockPlaceEvent, je ne sais pas trop comment faire, peut être créer une loc autour du bloc placé (3 bloc autour) pour ensuite check si un lit est dans cette zone, mais voilà, je vous demande vôtre aide, Merci !
 

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 530
24
2 247
347
27
Bruxelles - Belgique
www.phoenix-rebirth.fr
Salut,

Comme d'habitude en développement, il existe plusieurs solutions ;)

Je t'en propose une avec les "BlockFace":
Java:
public void onBlockPlace(BlockPlaceEvent event) {

    final Block blockPlaced = event.getBlockPlaced();

    for(final BlockFace face : BlockFace.values()) {
        if(!face.equals(BlockFace.SELF)) { // On ne prend pas en compte le block lui-même
            final Block nextBlock = blockPlaced.getRelative(face);

            // Vérifier que c'est un lit
            if(nextBlock.getBlockData() instanceof Bed) {
                event.setCancelled(true);
                // Afficher un message
                break; // On arrête la boucle a partir du moment où y a au moins un lit
            }
        }
    }

}
Attention: le code n'as pas été testé... Il est possible qu'il ne fonctionne pas ;) Mais je pense que tu as l'idée principal


Cordialement,
Detobel36
 

MomoLeFr69

Architecte en herbe
8 Août 2018
83
3
56
18
Merci, je vais tester poour --> "nextBlock.getBlockData() instanceof Bed" il me semble que ca ne marche pas


Rebonjour, effectivement ca ne marchait pas, j'ai remplacé par " nextBlock.getType() == Material.BED_BLOCK"

Petit problème, j'aimerai que les bloc de Lapis soit imposable car on peut faire un dome pour proteger le lit, ca fait tomber le principe du mode de jeu
 

Fichiers joints

  • 2020-03-23_16.49.25.png
    2020-03-23_16.49.25.png
    301.8 KB · Affichages: 249

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 530
24
2 247
347
27
Bruxelles - Belgique
www.phoenix-rebirth.fr
Salut,

Petit problème, j'aimerai que les bloc de Lapis soit imposable car on peut faire un dome pour proteger le lit, ca fait tomber le principe du mode de jeu
Je ne comprend pas...

Tu veux qu'on ne puisse pas poser les blocks où ? Tu veux limiter le blocage aux blocs de lapis ?
Et en quoi ça te bloque dans le développement ? Il faut adapter le code... Tu as le principe, dit nous où tu bloques ;)


Cordialement,
Detobel36
 

MomoLeFr69

Architecte en herbe
8 Août 2018
83
3
56
18
Je veux que là où il y'a les bloc de lapis, on ne puisse pas poser de bloc, je suis débutant donc je ne saurais pas comment cibler ces blocs précisement
 

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 530
24
2 247
347
27
Bruxelles - Belgique
www.phoenix-rebirth.fr
Salut,

Je veux que là où il y'a les bloc de lapis, on ne puisse pas poser de bloc, je suis débutant donc je ne saurais pas comment cibler ces blocs précisement
C'est pas parce que tu es début que tu ne peux pas comprendre ce que tu fais...

Si on voit le problème en 2D et de manière schématique:
Code:
x   x   x
x   L   x
x   x   x
Les "x" représente les blocks où on ne peut pas construire et le "L" représente le lit.

Pourquoi est-ce que le plugin fait ça ? Parce qu’on prend tous les blocks qui "touchent" le block que l'on place.
En gros si on prend le point en haut au milieu, il a sa face du bas (disons SUD) qui touche un bloc de lit.

Toi ce que tu veux c'est que ça marche à 2 blocks de distances (si j'ai bien suivit). Donc regardons ce qu'on a en stock:
https://hub.spigotmc.org/javadocs/s...l#getRelative-org.bukkit.block.BlockFace-int-

Tient, il est possible d'avoir le block relatif à une certaine distance.
Donc par défaut c'est 1:
Code:
a   a   a   a   a
a   x   x   x   a
a   x   L   x   a
a   x   x   x   a
a   a   a   a   a
("a" ici représentent les block autorisé)
Si la distance est maintenant de 2:
Code:
x   x   x   x   x
x   x   x   x   x
x   x   L   x   x
x   x   x   x   x
x   x   x   x   x


Cordialement,
Detobel36
 

MomoLeFr69

Architecte en herbe
8 Août 2018
83
3
56
18
Très clair, merci je pensais que la distance n'etait pas modifiable avec cette methode
 

MomoLeFr69

Architecte en herbe
8 Août 2018
83
3
56
18
Je suis un peu paumé, j'ai cherché sur le wiki tout ca, mais aucune info, a part si c'est moi qui sait rien faire, mais quand je met par exemple
final Block nextBlock = blockPlaced.getRelative(face, 3);

Ca ne considère pas les 3 blocs autour du lit,mais seulement 3 bloc a près le lit

pour schématiser
a a a a a a a
a x x x x x a
a x x x x x a
a x x L x x a
a x x x x x a
a x x x x x a
a a a a a a a