PatchNote du 01/05/2021
Tags: paladium, news, minecraft, french
Published: 2021-04-30 22:17:58

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/29nxerhsg0fzntoahazv.png)
Bienvenue sur le PatchNote du **samedi 1 mai 2021**.
 
Ce samedi 1 mai, Paladium a effectué une mise à jour axée sur des corrections de bugs ainsi qu'une légère modification de la mise à jour **Pillage**.

---
![Bugs_Banner_IMG](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/amhifx79c2camszrzv9m.png)
<br>

<br>
## **Trade**

Vous n'êtes pas sans savoir que lors de la dernière maintenance le ``/trade`` a été ajouté aux personnes possédant un grade sur Paladium.

Cependant, certains bugs étaient encore présents :

 - Lors de l'annulation d'un échange en quittant le menu ou en se déconnectant, les items n'étaient pas bien redonnés aux joueurs participant à l'échange. Ceux-ci étaient jetés au sol, cela représentait donc un réel souci pour les joueurs réalisant un trade dans le spawn. Désormais, les items seront ajoutés dans l'inventaire si le joueur possède possède suffisamment de place et sinon seront jetés au sol.

```java
/* lors de l'annulation */
public void cancel() {
    ...
    /* si l'on ne peut pas ajouter l'item à l'inventaire du joueur */
    if (!left.inventory.addItemStackToInventory(s)) {
        /* drop un item avec les paramètres : joueur, x, y, z, item */
        PlayerUtils.dropItemStack(left, left.posX, left.posY, left.posZ, s);
    }
}
```
 - Le trade contient un ``autocancel``, c'est-à-dire que lorsqu'un joueur modifie le contenu de l'échange que l'autre joueur a validé, cela annule la validation pour éviter les arnaques. Cependant, nous avions oublié de prendre en compte les champs d'argent et d'exp. Cela a donc laissé place à quelques arnaques mais cela est désormais réglé. 

Lors de l'envoi du packet (informations) au serveur lorsque l'on modifie notre état dans le trade ``CSButtonStateChanged.java`` une vérification de modification d'exp et de l'argent a été ajoutée.
```java
if (tradeHasAccepted()) {
    setTradeHasAccepted(false);
    refresh();
}
```
Ce code permet, si une modification est faite alors qu’une partie du trade a validé l'échange, d’indiquer que la validation est annulée et de rafraichir le menu des deux participants.
<br>
<br>
## **Bug sous la bedrock**

Différents bugs avaient lieu sous la bedrock. Ceux-ci permettaient notamment de rentrer dans des bases en passant par le vide (void) et d'utiliser certaines commandes pour pouvoir se retrouver dans une base. Les différentes mécaniques/bugs connus par notre équipe ont donc été corrigés. En voici la liste :

 - HangGlider sous la bedrock
 - Slimy Helmet sous la bedrock
 - Commandes de téléportation sous la bedrock (/tpa /tpaccept /tpahere /unsafetp) [liste non exhaustive] 

Pour désactiver ces différentes mécaniques, l'ajout d'une simple condition en java a été suffisant. 
```java
if(player.posY < 0) {
    //annule
    return;
}
```
En effet, la condition est de vérifier si lors de l'utilisation de la mécanique visée le joueur se trouve en position Y inférieure à la couche 0. Si c'est le cas, alors la mécanique est annulée.
<br>
<br>
## **Boom Obsidienne**

La Boom Obsidienne faisait des dégâts même dans des endroits où le joueur ne pouvait pas prendre de dégâts (exemple zone protégées ou serveur minage).

Cela était dû à une erreur de développement, le code effectuant une modification directe de la vie du joueur.
```java
/* Définit la vie du joueur à sa vie -4 demi-coeurs (donc 2 coeurs) */
player.setHealth(player.getHealth - 4f);
```

Dorénavant, le code applique une attaque au joueur, permettant ainsi au jeu de vérifier s’il doit bien prendre des dégâts ou non.
```java
/* Attaque le joueur de 4 demi-coeurs avec un type de dégât générique */
player.attackEntityFrom(DamageSource.generic, 4f);
```
Cela devrait régler ces différents soucis (PS: même en /god le staff prenait des dégâts 🚨)
<br>
<br>
## **Table d'enchantement moddée**

Lorsque vous mettiez un item dans la table d'enchantement moddée, peu importe votre item la table vous proposait tous les enchantements possibles.

Désormais celle-ci se basera sur le type de l'item déposé afin de ne vous proposer que ceux disponibles et fonctionnels sur l'item.
```java
/* lorsque l'on récupère la liste des enchantements avec un item */
public static Map<Enchantment, String> getEnchants(Item item) {
    Map<Enchantment, String> ench = new HashMap<>();
    /* On parcourt la liste des enchantements qui existe */
    for (Enchantment enchantment : enchants.keySet()) {
      /* Si l'enchantement peut être appliqué sur l'item en question */
      if (enchantment.type.canEnchantItem(item)) {
        /* On accepte l'enchantement */
        ench.put(enchantment, enchants.get(enchantment));
      }
    }
    /* On renvoie la liste des enchantements acceptés */
    return ench;
}
```

La table d'enchantement ne vous montrera donc plus que les enchantements disponibles, cela devrait vous faire gagner du temps.
<br>
<br>
## **Cobble Breaker**

Récemment le shift click a été ajouté dans l'interface du Cobble Breaker, mais cet ajout a donné lieu à certains bugs notamment celui concernant la récupération d'expérience pour le métier de Mineur. 

Dans certains cas particuliers, l'expérience donnée au joueur ne correspondait pas à la somme des particules récupérées.

Nous ne rentrerons pas dans les détails techniques de ce bug car il relève du code de Minecraft mais il est désormais résolu.
<br>
<br>
## **Réparation de la LuckySword**

Contrairement à ce qui était prévu, il était impossible de réparer la LuckySword (palier 100 du LuckyStats) dans une enclume avec des LuckyBlock. 

Il s’agissait juste d’un oubli des développeurs, le code a été ajouté et fonctionne désormais sur le serveur en espérant que certains d'entre vous la possède bientôt ! 🎉
<br>
<br> 
## **HitBox**

Il semblerait que les mobs du métier de Hunter ait une hitbox trop faible pour certains… Nous n'avons pas été radins et avons augmenté de 0,2 bloc l’intégralité des hitbox des animaux aussi bien en largeur qu’en longueur et en hauteur !

```java
public class MyEntity {
   setSize(size + 0.2, size + 0.2, size + 0.2); 
}
```
Ce fut long et fastidieux... hum... hum...
<br>
<br>
## **Home Remover**

Le Home Remover avait quelques soucis d'affichage, ceux-ci ont été réglés.

Le cooldown affiché au-dessus du Home Remover n'était pas toujours correct et descendait par paliers, nous en avons donc profité pour paramétrer le format du cooldown en ``HH:MM:SS``.

```java
return String.format("%02d:%02d:%02d", seconds / 3600, (seconds % 3600) / 60, seconds % 60);
```
Pour obtenir un cooldown de ce style nous allons d'abord récupérer l'heure : ``nombre_de_secondes / 3600``

Ensuite pour les minutes, le calcul se complexifie un peu. Il faut savoir que en java les "%" sont ce que l'on appelle des ``modulo``

Un *modulo* est le reste de la division, par exemple 

> 10 modulo 3

Cela retournera 1, je m'explique: 3 rentre 3 fois dans 10, cela fait 9. La division n'étant pas parfaite il nous reste un "reste" qui ici est 1 (10-9).

Pour le nombre de minutes, nous allons donc faire ``(nombre_de_secondes % 3600) / 60``

Et enfin pour le nombre de secondes : ``nombre_de_secondes % 60``
<br>
<br>
## **Golem sous la bedrock**

Il arrivait que certains Guardian Golem traversent la dernière couche de bedrock lorsqu'ils se trouvaient dessus. Le souci étant qu’une fois dans le void, ils tombaient à l'infini et donc ne remboursait pas la Guardian Stone au joueur maitre du Golem.

Désormais, si le golem se trouve en dessous de la couche 0, il sera automatiquement kill.
```java
/* Lorsque l'entité se met à jour */
public void onEntityUpdate() {
    /* Si sa position est en-dessous de la couche 0 */
    if(this.posY < 0) {
        /* On tue le golem */
        setDead();
    }
}
```

---
<br>
![Features_Banner_IMG](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/shu42fl8kaot32bup4yu.png)
<br>
## **Amulettes**

Nous avons ajouté une petite description en-dessous des amulettes pour que vous ne soyez plus perdus (tout comme nous d'ailleurs).
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yk73sxds60hy7eldrdrn.PNG)
<br>
<br>
## **Enchantement Humiliation**

Nous avons pris la liberté et le plaisir de vous ajouter de nouvelles petites phrases pour accompagner votre mort avec l'enchantement Humiliation.

En voici quelques exemples :
 - Adieu <victim>, mort au combat sous la main de <killer>
 - <victim> n’est plus... <killer> l’a réduit en miettes

Nous vous laissons la surprise des autres 🙈
<br>
<br>
## **Modification Pillage**

### Modification de la Boom Obsidienne 

```YAML
Description : Génère une explosion qui affecte les joueurs et les entités

Dégâts entités : retire 10% de la vie de l’entité. Si l’entité a moins de 1% de sa vie initiale, il meurt.

Dégâts joueur passe de : 5 coeurs -> 2 coeurs

Pas de dégâts en-dessous de x coeurs passe de : 3 coeurs -> 2 coeurs

Rayon d’explosion : 1,5 bloc
```
<br>
### Ajout d'un nouveau bloc : la **Mega** Boom Obsidienne

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d0wl8sghmx5x12fkmmi2.PNG)

Basé sur la Boom Obsi, celle-ci fera trembler vos plus féroces ennemis
```YAML
Description : Génère une explosion qui affecte les joueurs et les entités

Dégâts entités : Retire 20% de la vie de l’entité. Si l’entité a moins de 1% de sa vie initiale, il meurt.

Dégâts joueur : 4 coeurs

Pas de dégâts en dessous x coeurs : 2 coeurs

Rayon d’explosion : 2 blocs
``` 
Et voici son craft :
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sux9ya0hsmcnkxt6d5mk.png)
<br>
### Obsidienne directionnelle

**Ancien système :** Actuellement les Slime Obsi se placent vers le joueur s’il est à 3 blocs ou moins. Sinon, elles se placent toujours vers le sud.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ontthivfcybw29c638d7.gif)

**Nouveau système :** Apparition d'un symbole sur la face sud de base. Ensuite, via la pioche en obsidienne (clic droit) le symbole se déplacera de face en face.
Si l’obsidienne est placée à côté d’une autre obsidienne, le symbole prend de base la même direction.
<br>
### **Ajout de 3 nouvelles enclumes**
Désormais, le serveur compte des enclumes en Améthyste, en Titane et en Paladium !
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8t6wgii3u17gws3mxi93.png)

<center>

| Enclume  | Durabilité | Nombre moyen d'utilisation |
| :--------------- |:---------------:| -----:|
| Basique  | 5 | 40 |
| Améthyste  | 7 | 56 |
| Titane  | 10 | 80 |
| Paladium | 14 | 112 |

</center>

Les enclumes sont désormais utilisables dans les zones claims.

Aucune modifications n’a été faites sur la résistance des enclumes aux explosions et notamment à la dynamite. Cela reste comme avant, les nouvelles enclumes apportent donc seulement un plus grand nombre d’utilisation avant de se détruire.

---
Voici ce qui signe la fin de ce PatchNote, nous espérons que cela vous a plu et que ce nouvel aspect technique vous plaira tout autant.

**Un sondage est disponible ici** 🚀 [✨sondage✨](https://forms.gle/bQERBbTeKHebZBiu6)
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sw9i84umvmbtbrf2tn2g.png)

N'hésitez pas à laisser un commentaire ci-dessous, nous vous répondrons avec le plus grand plaisir.