Per-player creative experience tweaks for creaclone (Lophine 26.2/Folia) — opt-in replacements for global Carpet rules
Find a file
EkaiiMC bd08d0c94c EkaiiTweaks 1.0.0: per-player creative experience tweaks for creaclone
Per-player, opt-in (off by default), PDC-persisted replacements for the
global Lophine Carpet experience rules: /onehit (creativeOneHitKill),
/nocooldown (creativeNoItemCooldown), /opencontainer
(creativeOpenContainerForcibly), /ignoreentity (blockPlacementIgnoreEntity).
creativeNoClip stays a global rule (client-executed, already per-player).
Folia-safe: event-driven, entity schedulers only.

Reason: Paul's decision — Carpet experience features must not be forced
globally on creaclone; each player toggles them for themselves.
2026-07-19 00:43:08 +02:00
src/main EkaiiTweaks 1.0.0: per-player creative experience tweaks for creaclone 2026-07-19 00:43:08 +02:00
.gitignore EkaiiTweaks 1.0.0: per-player creative experience tweaks for creaclone 2026-07-19 00:43:08 +02:00
build.gradle EkaiiTweaks 1.0.0: per-player creative experience tweaks for creaclone 2026-07-19 00:43:08 +02:00
README.md EkaiiTweaks 1.0.0: per-player creative experience tweaks for creaclone 2026-07-19 00:43:08 +02:00
settings.gradle EkaiiTweaks 1.0.0: per-player creative experience tweaks for creaclone 2026-07-19 00:43:08 +02:00

EkaiiTweaks

Tweaks d'expérience créatif per-joueur pour creaclone (Lophine 26.2 / Folia). Remplace les règles Carpet globales "expérience" par des équivalents opt-in, off par défaut, que chaque joueur active pour lui seul.

Commandes (permission ekaii.tweaks.use, default true)

Commande Effet (toujours limité au joueur qui l'exécute, créa uniquement)
/tweaks (alias /mytweaks) Liste l'état ON/OFF de tes tweaks, lignes cliquables pour toggle
/tweaks <id> [on|off] Toggle/force un tweak
/onehit Coup fatal : tes attaques mêlée tuent instantanément (cibles non créa/spec)
/nocooldown Aucun cooldown d'objet (ender pearls, chorus, boucliers…)
/opencontainer Ouvre les coffres / enderchests / shulkers bloqués
/ignoreentity Pose des blocs même si une entité occupe la place

Persistance : PersistentDataContainer du joueur (survit reco/restart, rien à réappliquer). Folia-safe : folia-supported: true, event-driven, schedulers d'entité uniquement.

Correspondance avec les règles Carpet de Lophine (investigation 2026-07-19)

Règle Carpet (globale) Implémentation Lophine Décision
creativeOneHitKill Serveur-forcé : Player#attack court-circuité, Entity#kill direct pour TOUT joueur créa Plugin /onehitEntityDamageByEntityEvent, dégâts létaux (2e6, létal après 80% de réduction max). Diff assumées : pas de sweep sneak, les totems fonctionnent encore
creativeNoItemCooldown Serveur-forcé : return dans ServerItemCooldowns#addCooldown AVANT le PlayerItemCooldownEvent de Paper Plugin /nocooldown — règle globale OFF ⇒ l'event Paper fire et est cancellable per-joueur
creativeOpenContainerForcibly Serveur-forcé : bypass des checks "blocked" dans ChestBlock / EnderChestBlock / ShulkerBoxBlock Plugin /opencontainer — pas de hook Bukkit à cet endroit ⇒ détection par observation (2 ticks après l'interaction, rien d'ouvert = bloqué) puis ouverture via l'API Bukkit (passe par InventoryOpenEvent). Cosmétique : vue générique, pas d'animation de couvercle
blockPlacementIgnoreEntity Serveur-forcé : bypass du check collision-entité dans BlockItem#useOn Plugin /ignoreentityBlockCanBuildEvent#setBuildable(true) seulement si une entité intersecte réellement la position (le verdict vanilla couvre aussi canSurvive, on ne l'écrase pas aveuglément)
creativeNoClip Patch Leaves 0116 : noPhysics = spectator || (règle && créa && vol) — le serveur ne fait qu'ACCEPTER ; le déplacement à travers les blocs est exécuté par le CLIENT (mod Carpet, règle synchronisée via CarpetServerProtocol). Un client vanilla collisionne localement et ne traverse rien PAS dans le plugin — déjà per-joueur de fait (seuls les clients moddés noclipent, en vol créa). Règle globale laissée ON. Aucune API Bukkit pour noPhysics per-joueur ⇒ un gating plugin serait du NMS lourd pour rien

Règles passées à false dans creaclone/lophine_config/lophine_carpet_config.toml (live) : creativeOneHitKill, creativeNoItemCooldown, creativeOpenContainerForcibly, blockPlacementIgnoreEntity. Les mécaniques de monde (update suppression, redstone, observer, xpNoCooldown, etc.) restent globales et intactes.

Extension

Ajouter un tweak per-joueur = une constante dans Tweak + un listener gaté sur TweakManager#isActive(player, tweak) (+ la commande raccourci dans plugin.yml si voulu). Rien d'autre.

Build

export JAVA_HOME=/opt/homebrew/opt/openjdk/libexec/openjdk.jdk/Contents/Home
gradle build   # → build/libs/EkaiiTweaks-<version>.jar