Skip to content

Commit 060fa55

Browse files
committed
feat(README): Big update on the README.md.
1 parent 87d4f45 commit 060fa55

File tree

1 file changed

+168
-42
lines changed

1 file changed

+168
-42
lines changed

README.md

Lines changed: 168 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,13 @@ Inventory#addItem(item.getItemStack());
5959
* `removeEnchant()` : Retire un enchantement à l'item
6060
* `build()` : Construit l'item pour qu'il soit utilisable
6161

62-
### 🖱️ Click handler
62+
### Handlers
6363

64-
Il est possible de définir l'action exécutée lors d'un clic sur l'item dans un
65-
inventaire.
64+
Un Handler est un morceau de code qui va être exécuté lorsqu'un joueur va faire une certaine\
65+
action avec un item.
66+
67+
### Utilisation (exemple : [Click Handler](#Click handler))
6668

67-
**Exemple :**
6869
```java
6970
ClickHandler clickHandler = new ClickHandler()
7071
.addClickType(ClickType.LEFT)
@@ -92,49 +93,89 @@ un click handler différent, alors jouez avec les codes couleurs pour que ça ne
9293
soit pas visible du point de vue du joueur 😉
9394
(`"§cTest"` et `"§r§cTest"` sont différents mais rendent pareil à l'écran)
9495

96+
### Click handler
97+
98+
Il est possible de définir l'action exécutée lors d'un clic sur l'item dans un
99+
inventaire.
100+
101+
#### Fonctionnalités :
102+
103+
- Type de click (clic gauche, clic droit, shift + clic...)
104+
```java
105+
ClickHandler#addClickType(ClickType.LEFT);
106+
ClickHandler#addClickTypes(ClickType.SHIFT_LEFT, ClickType.SHIFT_RIGHT); // Ajoute plusieurs types de clics en une fois.
107+
ClickHandler#addAllClickTypes(); // Ajoute tous les types de clic possibles.
108+
```
109+
95110
> [!TIP]
96111
> Renseignez-vous sur l'enum [ClickType](https://helpch.at/docs/1.8/org/bukkit/event/inventory/ClickType.html) (du package `org.bukkit`).
97112
98113
### 🫱 Interaction handler
99114

100115
Il est possible de définir l'action exécutée lors d'une interaction avec l'item.
101116

102-
**Exemple :**
117+
#### Fonctionnalités :
118+
119+
- Type d'interaction (clic gauche, clic droit, dans l'air, ou pas...)
103120
```java
104-
InteractionHandler interactionHandler = new InteractionHandler()
105-
.addInteractionType(Action.RIGHT_CLICK_AIR)
106-
.setClickAction((Player player, ItemStack clickedItem, int clickedSlot) -> {
107-
// Actions à faire lors de l'interaction.
108-
});
109-
110-
HashItem item = new HashItem(Material.COMPASS)
111-
.addInteractionHandler(interactionHandler)
112-
.build(guiManager);
121+
InteractHandler#addInteractType(Action.LEFT_CLICK_AIR);
122+
InteractHandler#addInteractTypes(Action.RIGHT_CLICK_AIR, Action.RIGHT_CLICK_BLOCK); // Ajoute plusieurs types d'interactions en une fois.
123+
InteractHandler#addAllInteractTypes(); // Ajoute tous les types de clic possibles.
113124
```
114125

115-
> [!WARNING]
116-
> Tout comme pour les Click Handlers, `guiManager`
117-
(dans la fonction `build()`) doit être une instance de [HashGuiManager](#hashguimanager),
118-
qui doit être stocké à la racine de votre plugin.
119-
Cette instance s'occupe de détecter les intéractions et d'exécuter ce qu'il
120-
faut en fonction de l'item.
121-
122-
> [!WARNING]
123-
> Le ciblage de l'item se fait à partir de son `displayName`, donc faites
124-
bien attention à ne pas donner le même nom à deux items si vous ne voulez pas
125-
qu'ils exécutent la même chose.
126-
Si deux items doivent avoir le même nom mais
127-
un click handler différent, alors jouez avec les codes couleurs pour que ça ne
128-
soit pas visible du point de vue du joueur 😉
129-
(`"§cTest"` et `"§r§cTest"` sont différents mais rendent pareil à l'écran)
130-
131126
> [!TIP]
132127
> Renseignez-vous sur l'enum [Action](https://helpch.at/docs/1.8/index.html?org/bukkit/event/block/Action.html) (du package `org.bukkit`).
133128
129+
### 🫱 Hold handler
130+
131+
Il est possible de définir l'action exécutée lorsqu'un joueur prend (ou retire) un item dans sa main.
132+
133+
#### Fonctionnalités :
134+
135+
- Action de maintien (action exécutée lorsque le joueur prend l'item dans sa main)
136+
```java
137+
HoldAction action = (Player player, ItemStack item, int slot) -> {
138+
// ...
139+
};
140+
141+
HoldHandler#setHoldAction(action);
142+
```
143+
144+
- Action de non-maintien (action exécutée lorsque le joueur retire l'item de sa main)
145+
```java
146+
HoldAction action = (Player player, ItemStack item, int slot) -> {
147+
// ...
148+
};
149+
150+
HoldHandler#setNotHoldAction(action);
151+
```
152+
153+
> [!CAUTION]
154+
> Les armures sont compatibles avec le Gestionnaire de maintien.\
155+
> Cependant, si vous utilisez PlayerInventory#setHelmet (ou une autre méthode pour définir une pièce d'armure),
156+
> le Gestionnaire de maintien ne le détectera pas automatiquement.\
157+
> Vous devrez appeler la fonction HashGuiHold#refreshArmorState(Player player) pour actualiser la détection.
158+
159+
### 🫱 Hit handler
160+
161+
Il est possible de définir l'action exécutée lorsqu'un joueur tape un autre joueur.
162+
163+
#### Fonctionnalités :
164+
165+
- Mort uniquement (n'exécute l'action que si le coup tue l'autre joueur)
166+
```java
167+
HitHandler#setOnlyKill(true);
168+
```
169+
170+
### 🫱 Destroy handler
171+
172+
Il est possible de définir l'action exécutée lorsqu'un joueur casse un bloc.
173+
174+
134175
### HashGuiManager
135176

136-
Pour que les `ClickHandler` et les `InteractionHandler` fonctionnent,
137-
vous devez créer une instance de `HashGUIManager` à la racine de votre plugin
177+
Pour que les différents handlers fonctionnent,
178+
vous devez créer une instance de `HashGuiManager` à la racine de votre plugin
138179
et donner cette instance lors du build de votre item personnalisé.
139180

140181
**Exemple :**
@@ -155,6 +196,7 @@ public class Test extends JavaPlugin {
155196
// Reste de votre code
156197
}
157198

199+
158200
/* Initialisation et configuration du manager */
159201
private void setupGuiManager()
160202
{
@@ -209,6 +251,8 @@ les modifications relatives à `HashItem`.
209251
Quand vous êtes sur la page d'une tête, descendez jusqu'à la section "For developers" pour trouver la valeur
210252
de la texture en `base64`.
211253

254+
## Guis
255+
212256
## HashGui
213257

214258
### Utilisation
@@ -220,7 +264,10 @@ HashItem item = new HashItem(Material.SIGN)
220264
.addLore("Cliquez pour accéder aux paramètres")
221265
.build();
222266

223-
HashGui gui = new HashGui("Menu", 5)
267+
String title = "Menu";
268+
int linesAmount = 5;
269+
270+
HashGui gui = new HashGui(title, linesAmount)
224271
.setItem(3, item);
225272

226273
gui.open(player);
@@ -233,7 +280,7 @@ gui.open(player);
233280
* `update()` : Rafraîchit la GUI d'un joueur
234281
* `setItem()` : Place un item dans la GUI
235282

236-
### Masks
283+
## Masks
237284

238285
Les masques (`Mask`) sont utilisés pour créer un agencement d'items dans une GUI.
239286

@@ -244,33 +291,36 @@ Par exemple, si vous voulez faire une bordure comme ceci :
244291
... un code normal serait :
245292

246293
```java
294+
Inventory gui;
295+
247296
ItemStack glass = new ItemStack(Material.STAINED_GLASS_PANE);
248297
ItemStack grass = new ItemStack(Material.GRASS);
249298
ItemStack glowstone = new ItemStack(Material.GLOWSTONE);
250299
ItemStack bookshelf = new ItemStack(Material.BOOKSHELF);
251300

252301
for (int i = 0 ; i < 10 ; i++) {
253-
menu.setItem(i, glass);
302+
gui.setItem(i, glass);
254303
}
255304
for (int i = 17 ; i < 26 ; i++) {
256-
menu.setItem(i, glass);
305+
gui.setItem(i, glass);
257306
}
258-
menu.setItem(11, grass);
259-
menu.setItem(13, glowstone);
260-
menu.setItem(15, bookshelf);
307+
gui.setItem(11, grass);
308+
gui.setItem(13, glowstone);
309+
gui.setItem(15, bookshelf);
261310
```
262311

263312
Pas dingue, n'est-ce pas ? Et c'est là qu'interviennent les masques. Le code
264313
ci-dessus devient alors :
265314

266315
```java
316+
HashGui gui; // Peut être une instance de Inventory.
317+
267318
ItemStack glass = new ItemStack(Material.STAINED_GLASS_PANE);
268319
ItemStack grass = new ItemStack(Material.GRASS);
269320
ItemStack glowstone = new ItemStack(Material.GLOWSTONE);
270321
ItemStack bookshelf = new ItemStack(Material.BOOKSHELF);
271322

272-
/* ⬇️ Doit être une instance de HashGUI. */
273-
Mask mask = new Mask(menu);
323+
Mask mask = new Mask(gui);
274324

275325
mask.setItem('s', glass);
276326
.setItem('g', grass);
@@ -295,4 +345,80 @@ Si une lettre n'a pas d'item assigné, celui-ci sera placé :
295345
> Le caractère espace (` `) ne peut pas être assigné à un item, étant donné qu'il
296346
sert de vide.
297347

298-
## Fait avec 💜 par [Lysandre B.](https://github.com/Shuvlyy)[![wakatime](https://wakatime.com/badge/user/2f50fe6c-0368-4bef-aa01-3a67193b63f8/project/018d7a18-67ef-47e3-a6c4-5c8cc4b45021.svg)](https://wakatime.com/badge/user/2f50fe6c-0368-4bef-aa01-3a67193b63f8/project/018d7a18-67ef-47e3-a6c4-5c8cc4b45021) + [![wakatime](https://wakatime.com/badge/user/2f50fe6c-0368-4bef-aa01-3a67193b63f8/project/018d794b-8bf6-46ef-acb3-549287335474.svg)](https://wakatime.com/badge/user/2f50fe6c-0368-4bef-aa01-3a67193b63f8/project/018d794b-8bf6-46ef-acb3-549287335474)
348+
349+
## PaginatedHashGui
350+
351+
PaginatedHashGui est une HashGui avec un système de pages.
352+
353+
### Utilisation
354+
355+
```java
356+
String title = "Menu paginé";
357+
int linesAmount = 6;
358+
359+
PaginatedHashGui gui = new PaginatedHashGui(title, linesAmount, guiManager); // guiManager doit être une instance de HashGuiManager.
360+
361+
HashItem previousPage = new HashItem(Material.ARROW)
362+
.setName("Page précédente");
363+
364+
HashItem nextPage = new HashItem(Material.ARROW)
365+
.setName("Page suivante");
366+
367+
gui.setPreviousPageItem(previousPage); // Lors du clic sur previousPage, la GUI se rafraîchira à la page précédente.
368+
gui.setNextPageItem(nextPage); // Lors du clic sur nextPage, la GUI se rafraîchira à la page suivante.
369+
```
370+
371+
#### Fonctionnalités
372+
373+
* `setPreviousPageItem(HashItem item)` : Actualise la GUI à la page précédente (si possible)
374+
* `setNextPageItem(HashItem item)` : Actualise la GUI à la page suivante (si possible)
375+
* `update(Player player)` : Rafraîchit la GUI (pour les pages)
376+
* `clearPageContent()` : Vide visuellement la page actuelle (utilisé pour le rafraîchissement)
377+
* `addPage(Page page)` : Ajoute une page
378+
* `createNewPage()` : Crée une nouvelle page et l'ajoute
379+
* `clearPages()` : Supprime toutes les pages
380+
381+
### Pages
382+
383+
#### Création d'une page
384+
385+
```java
386+
PaginatedHashGui gui;
387+
388+
Page page = gui.createNewPage(); // Crée une nouvelle page et l'ajoute à la GUI
389+
390+
/* OU */
391+
392+
Page page = new Page(gui); // Crée une nouvelle page
393+
gui.addPage(page); // L'ajoute à la GUI
394+
```
395+
396+
#### Fonctionnalités
397+
* `addItem(HashItem item)` : Ajoute un item dans la page au premier slot libre
398+
* `setItem(int slot, HashItem item)` : Ajoute un item dans la page à un endroit précis
399+
* `removeItem(int slot)` : Retire un item d'un slot
400+
* `clearItems()` : Retire tous les items de la page
401+
402+
> [!TIP]
403+
> Par défaut, à la création d'une `PaginatedHashGui`, une nouvelle page vierge se crée automatiquement.
404+
405+
#### Gestion de page
406+
407+
```java
408+
Page page;
409+
410+
HashItem item1 = new HashItem(Material.BED);
411+
HashItem item2 = new HashItem(Material.BEDROCK);
412+
413+
page.addItem(item1);
414+
page.setItem(8, item2);
415+
page.removeItem(8);
416+
```
417+
418+
> [!WARNING]
419+
> * Pour `Page#addItem()`, si aucun slot n'est disponible, une exception de type `IllegalArgumentException` sera renvoyée.\
420+
> * Pour `Page#setItem()` ou `Page#removeItem()`, si le slot donné n'est pas disponible, la même exception sera renvoyée.\
421+
> * **Un slot est considéré non disponible s'il n'est pas valide (en dessous de 0 ou au dessus de la capacité maximum de la GUI)
422+
> ou si un item est déjà présent sur ce slot dans la GUI parente.**
423+
424+
## Fait avec 💜 par [Lysandre B.](https://github.com/Shuvlyy)[![wakatime](https://wakatime.com/badge/user/2f50fe6c-0368-4bef-aa01-3a67193b63f8/project/018d794b-8bf6-46ef-acb3-549287335474.svg)](https://wakatime.com/badge/user/2f50fe6c-0368-4bef-aa01-3a67193b63f8/project/018d794b-8bf6-46ef-acb3-549287335474) + [![wakatime](https://wakatime.com/badge/user/2f50fe6c-0368-4bef-aa01-3a67193b63f8/project/018d7a18-67ef-47e3-a6c4-5c8cc4b45021.svg)](https://wakatime.com/badge/user/2f50fe6c-0368-4bef-aa01-3a67193b63f8/project/018d7a18-67ef-47e3-a6c4-5c8cc4b45021)

0 commit comments

Comments
 (0)