Dit is een oude revisie van het document!
Ja. Dan zou ik dezelfde documentatiestijl en structuur aanhouden als TulpenCraftEssentials, maar volledig toegespitst op TulpenCraftRentals.
Ik zou daarbij heel bewust onderscheid maken tussen wat de plugin nu al technisch heeft en wat we nog gaan bouwen. Dus geen documentatie die doet alsof ChestShop, GUI, WorldGuard, reset enz. al klaar zijn.
Hier is de eerste versie in DokuWiki-formaat, direct kopieerbaar:
TulpenCraftRentals
๐ Status
| Eigenschap | Waarde |
|---|---|
| Plugin | TulpenCraftRentals |
| Status | ๐ก In ontwikkeling |
| Versie | 0.1.0-SNAPSHOT |
| Buildsysteem | Maven |
| Platform | Paper 26.2 |
| Java | Java 25 |
| Server(s) | Survival |
| Onderdeel van netwerk | Ja |
| Laatste controle | datum |
| Server | Actief |
|---|---|
| Velocity | โ |
| Lobby | โ |
| Survival | โ |
| Events | โ |
๐ฏ Doel
TulpenCraftRentals beheert tijdelijke verhuur van vooraf gedefinieerde gebieden binnen TulpenCraft.
De plugin maakt het mogelijk om bijvoorbeeld:
- ๐ Huizen
- ๐ Winkels
- ๐จ Hotelkamers
tijdelijk aan spelers te verhuren.
Een huurcontract koppelt een speler aan een vooraf geconfigureerde WorldGuard-regio. De plugin beheert vervolgens de administratieve en technische onderdelen van de huurperiode.
Hieronder vallen onder andere:
- huurprijs;
- huurperiode;
- huurder;
- medebewoners;
- winkelmedewerkers;
- ChestShop-limieten;
- permissievereisten;
- vervaldatum;
- ontruimingsperiode;
- huurverlenging;
- beรซindiging;
- reset van de ruimte;
- audit logging;
- notificaties.
WorldGuard blijft verantwoordelijk voor de daadwerkelijke gebiedsbeveiliging. TulpenCraftRentals beheert de huurstatus en bepaalt wie toegang tot een verhuurd gebied krijgt.
๐๏ธ Huurtypes
๐ HOUSE
Een huis is een persoonlijke woonruimte die tijdelijk door een speler kan worden gehuurd.
Eigenschappen:
- tijdelijke huurder;
- optionele medebewoners;
- configureerbaar maximum aantal bewoners;
- WorldGuard-beveiliging;
- optionele rank/permissie-eis;
- vrije inrichting door de huurder;
- preview voordat de huur wordt afgesloten;
- reset na afloop van de huur.
Meerdere huizen kunnen tegelijkertijd worden gehuurd wanneer de speler hiervoor voldoende rechten heeft.
๐ SHOP
Een winkel is een verhuurbare ruimte waarin de huurder een ChestShop kan exploiteren.
Eigenschappen:
- tijdelijke huurder;
- medewerkers kunnen worden toegevoegd;
- medewerkers kunnen de winkel beheren;
- WorldGuard-beveiliging;
- ChestShop-integratie;
- configureerbaar maximum aantal ChestShops;
- optionele rank/permissie-eis;
- preview voordat de huur wordt afgesloten;
- reset na afloop van de huur.
ChestShops mogen uitsluitend binnen het gekoppelde winkelgebied worden aangemaakt.
๐จ HOTEL
Een hotelkamer is een tijdelijke woonruimte met een relatief korte huurperiode.
Eigenschappen:
- tijdelijke huurder;
- configureerbaar aantal bewoners;
- WorldGuard-beveiliging;
- optionele rank/permissie-eis;
- preview voordat de huur wordt afgesloten;
- configureerbare huurperiode;
- reset na afloop van de huur.
Hotelkamers ondersteunen geen ChestShop-functionaliteit.
๐ Huurstatussen
Een rental doorloopt verschillende statussen:
DISABLED
โ
AVAILABLE
โ
RENTED
โ
EXPIRED
โ
RESETTING
โ
AVAILABLE
| Status | Betekenis |
|---|---|
| DISABLED | Rental is uitgeschakeld en kan niet worden gehuurd |
| AVAILABLE | Rental is beschikbaar voor verhuur |
| RENTED | Rental is actief verhuurd |
| EXPIRED | Huurperiode is verlopen en de ontruimingsperiode is gestart |
| RESETTING | Rental wordt teruggezet naar de oorspronkelijke staat |
Een rental mag uitsluitend automatisch terugkeren naar AVAILABLE wanneer de reset succesvol is uitgevoerd.
Wanneer een reset mislukt, blijft de rental op RESETTING staan en wordt de fout aan staff gemeld.
โฑ๏ธ Huurperiode
Iedere rental heeft een configureerbare huurperiode.
De periode wordt opgeslagen als een exacte vervaldatum.
Voorbeelden:
- 7 dagen;
- 14 dagen;
- 30 dagen;
- 90 dagen.
De exacte periode wordt per rental bepaald.
Waarschuwingen
De huurder ontvangt waarschuwingen voordat de huur afloopt.
Standaard:
| Moment | Melding |
|---|---|
| 7 dagen voor einde | Eerste waarschuwing |
| 3 dagen voor einde | Tweede waarschuwing |
| 1 dag voor einde | Laatste waarschuwing |
| Einde huurperiode | Huur is verlopen |
๐ช Ontruimingsperiode
Na het verlopen van een huurcontract krijgt de huurder maximaal 72 uur om de ruimte leeg te maken.
Deze periode is geen verlenging van het huurcontract.
Tijdens deze periode:
- is de huur officieel verlopen;
- kan de huurder persoonlijke spullen verwijderen;
- kan de huurder een verlenging uitvoeren;
- mogen geen nieuwe ChestShops worden aangemaakt;
- blijft de ruimte tijdelijk beschikbaar voor ontruiming.
Na het verstrijken van de 72 uur wordt de rental gereset.
De huurder is zelf verantwoordelijk voor het verwijderen of verplaatsen van alle eigendommen.
Achtergebleven items worden bij de reset verwijderd.
๐ฐ Betaling
TulpenCraftRentals gebruikt Vault als abstractielaag voor het economy-systeem.
De plugin implementeert geen eigen economie.
Betalingen worden geregistreerd in de database.
Ondersteunde transactietypes:
RENTRENEWREFUND
Een betaling moet veilig worden verwerkt zodat een speler niet wordt belast wanneer de huur uiteindelijk niet kan worden toegekend.
Vroegtijdig beรซindigen van een huurcontract geeft geen recht op restitutie.
๐ฅ Bewoners en medewerkers
Bewoners
Bij huizen en hotelkamers kunnen spelers als bewoners worden toegevoegd.
Een bewoner krijgt toegang tot de gekoppelde WorldGuard-regio volgens de configuratie van de rental.
De eigenaar van de rental blijft verantwoordelijk voor het beheer van de bewoners.
Winkelmedewerkers
Bij shops kunnen medewerkers worden toegevoegd.
Een medewerker kan, afhankelijk van de configuratie:
- bouwen;
- blokken plaatsen;
- blokken verwijderen;
- ChestShops plaatsen;
- ChestShops verwijderen;
- ChestShops beheren.
De technische database gebruikt hiervoor dezelfde member-structuur. Het onderscheid tussen bewoner en medewerker wordt bepaald door het rentaltype.
๐ ChestShop
ChestShop-functionaliteit is uitsluitend beschikbaar voor rentals van het type SHOP.
De plugin integreert met:
ChestShop 3.12.2
Regels
Een ChestShop:
- moet binnen de gekoppelde WorldGuard-regio staan;
- mag uitsluitend door de huurder of geautoriseerde medewerker worden aangemaakt;
- telt mee voor het maximale aantal ChestShops van de rental;
- wordt geregistreerd in de TulpenCraftRentals-database.
Wanneer het maximale aantal ChestShops is bereikt, wordt een nieuwe shopaanmaak geweigerd.
Bij het verwijderen van een ChestShop wordt de registratie uit de database verwijderd.
Bij het beรซindigen/resetten van een rental worden de geregistreerde ChestShops verwerkt voordat de ruimte wordt gereset.
๐ Rechten
TulpenCraftRentals gebruikt Bukkit/Paper-permissions en LuckPerms voor toegangscontrole.
Ranknamen worden niet hardcoded in de plugin.
In plaats daarvan worden permissies gebruikt.
Algemene rechten
| Permission | Beschrijving |
|---|---|
tulpencraft.rentals.admin | Volledige administratieve toegang |
tulpencraft.rentals.create | Rentals aanmaken |
tulpencraft.rentals.edit | Rentals aanpassen |
tulpencraft.rentals.reset | Rentals resetten |
tulpencraft.rentals.force | Geforceerde acties uitvoeren |
tulpencraft.rentals.members | Bewoners/medewerkers beheren |
Rankvereisten voor rentals
Een rental kan optioneel een permission vereisen.
Voorbeelden:
tulpencraft.rent.vip tulpencraft.rent.premium
Hierdoor kan LuckPerms bepalen welke spelers toegang hebben tot bepaalde rentals.
Rental-limieten
Ook het maximale aantal gelijktijdige rentals kan via permissions worden geregeld.
Voorbeelden:
tulpencraft.rent.limit.house.2 tulpencraft.rent.limit.shop.2 tulpencraft.rent.limit.hotel.3
De plugin hoeft hierdoor geen specifieke ranknamen te kennen.
๐ฌ Commando's
De primaire gebruikerscommand is:
/huur
/huren kan als alias worden gebruikt.
Spelercommando's
| Commando | Permission | Beschrijving |
|---|---|---|
/huur | โ | Opent het huurmenu |
/huur mijn | โ | Toont actieve eigen rentals |
/huur info <id> | โ | Toont informatie over een rental |
/huur huren <id> | โ | Start het huurproces |
/huur verlengen <id> | โ | Verlengt een actieve huur |
/huur opzeggen <id> | โ | Beรซindigt een huurcontract |
Beheercommando's
| Commando | Permission | Beschrijving |
|---|---|---|
/huur beheer | tulpencraft.rentals.admin | Opent het beheermenu |
/huur beheer lijst | tulpencraft.rentals.admin | Toont alle rentals |
/huur beheer info <id> | tulpencraft.rentals.admin | Toont volledige rentalinformatie |
/huur beheer aanmaken <region> <type> | tulpencraft.rentals.create | Maakt een rental aan |
/huur beheer naam <id> <naam> | tulpencraft.rentals.edit | Wijzigt de naam |
/huur beheer prijs <id> <bedrag> | tulpencraft.rentals.edit | Wijzigt de huurprijs |
/huur beheer duur <id> <dagen> | tulpencraft.rentals.edit | Wijzigt de huurperiode |
/huur beheer activeren <id> | tulpencraft.rentals.edit | Activeert een rental |
/huur beheer uitschakelen <id> | tulpencraft.rentals.edit | Schakelt een rental uit |
/huur beheer reset <id> | tulpencraft.rentals.reset | Start een rental-reset |
/huur beheer reset status <id> | tulpencraft.rentals.reset | Toont resetstatus |
/huur beheer geschiedenis <id> | tulpencraft.rentals.admin | Toont de auditgeschiedenis |
๐ฅ๏ธ Huurmenu
/huur opent het gebruikersmenu.
Het menu wordt opgebouwd rond de verschillende huurtypes.
| Categorie | Beschrijving |
|---|---|
| ๐ Huizen | Beschikbare huurhuizen |
| ๐ Winkels | Beschikbare winkelruimtes |
| ๐จ Hotel | Beschikbare hotelkamers |
| ๐ Mijn huur | Eigen actieve en verlopen rentals |
Bij een rental worden onder andere getoond:
- naam;
- type;
- prijs;
- huurperiode;
- vereiste permission;
- beschikbare plaatsen;
- aantal ChestShops;
- aantal bewoners;
- huidige status.
De speler kan vanuit het menu eerst een preview bekijken voordat de huur wordt afgesloten.
๐๏ธ Preview
Een speler kan een rental bekijken voordat deze wordt gehuurd.
De preview geeft uitsluitend toegang om de ruimte te bekijken.
Een preview:
- geeft geen huurrechten;
- maakt de speler geen eigenaar;
- geeft geen permanente WorldGuard-rechten;
- start geen huurperiode;
- brengt geen kosten met zich mee.
Pas na het bevestigen van de huur wordt de rental daadwerkelijk aan de speler toegewezen.
๐ WorldGuard
TulpenCraftRentals gebruikt WorldGuard voor fysieke gebiedsbeveiliging.
Iedere rental is gekoppeld aan een vooraf bestaande WorldGuard-regio.
TulpenCraftRentals beheert:
- huurder;
- bewoners;
- medewerkers;
- toegang tijdens de huurperiode.
WorldGuard blijft verantwoordelijk voor de daadwerkelijke bescherming van het gebied.
Een rental kan niet succesvol worden aangemaakt wanneer de gekoppelde WorldGuard-regio niet bestaat.
๐งฑ Reset
Na het einde van een huurperiode wordt de rental teruggezet naar de oorspronkelijke staat.
De reset gebruikt een WorldEdit-schematic.
Globale volgorde:
Rental verlopen
โ
Ontruimingsperiode
โ
ChestShops verwerken
โ
Members verwijderen
โ
Achtergebleven items verwijderen
โ
WorldEdit schematic plaatsen
โ
Controle
โ
AVAILABLE
Wanneer een reset mislukt:
RESETTING ``` De rental wordt in dat geval **niet automatisch beschikbaar gemaakt**. Staff moet het probleem eerst oplossen. --- ===== ๐๏ธ Database ===== TulpenCraftRentals gebruikt **MariaDB**. De database bevat onder andere: ^ Tabel ^ Functie ^ | `rentals` | Hoofdgegevens en status van rentals | | `rental_members` | Bewoners en medewerkers | | `rental_chestshops` | Geregistreerde ChestShops | | `rental_transactions` | Betalingen en transacties | | `rental_notifications` | Verzonden huurwaarschuwingen | | `rental_audit_log` | Audit- en beheergeschiedenis | Databaseverbindingen worden beheerd via HikariCP. Database-I/O wordt asynchroon uitgevoerd om de Minecraft-serverthread niet onnodig te blokkeren. --- ===== ๐ Notificaties ===== Belangrijke gebeurtenissen kunnen via Discord worden gemeld. Voorbeelden: * nieuwe huur; * huurverlenging; * verlopen huur; * reset gestart; * reset succesvol afgerond; * reset mislukt; * medewerker toegevoegd; * medewerker verwijderd. De plugin gebruikt hiervoor een afzonderlijke notification-laag zodat de Discord-integratie niet direct aan de rental-logica gekoppeld is. --- ===== ๐ Audit logging ===== Belangrijke acties worden geregistreerd. Voorbeelden: <code> RENTED RENEWED EXPIRED CANCELLED MEMBER_ADDED MEMBER_REMOVED CHESTSHOP_CREATED CHESTSHOP_REMOVED RESET_STARTED RESET_COMPLETED RESET_FAILED
Hierdoor kan achteraf worden nagegaan wat er met een rental is gebeurd.
๐ฆ Installatie
Jar-bestand:
TulpenCraftRentals-0.1.0-SNAPSHOT.jar
Locatie:
/srv/minecraft/survival/plugins/TulpenCraftRentals-0.1.0-SNAPSHOT.jar
Builden:
Het project gebruikt Maven.
mvn clean package
De gebouwde JAR wordt aangemaakt in:
target/TulpenCraftRentals-0.1.0-SNAPSHOT.jar
โ๏ธ Configuratie
Configuratiebestand:
/srv/minecraft/survival/plugins/TulpenCraftRentals/config.yml
Database
De plugin gebruikt een MariaDB-database.
Voorbeeld:
database: host: 172.16.0.30 port: 3306 name: tulpencraft_rentals username: rentals password: "" use-environment-password: true environment-password-variable: TULPENCRAFT_RENTALS_DB_PASSWORD pool-size: 10 connection-timeout-ms: 5000
Het databasewachtwoord wordt bij voorkeur via een environment variable beschikbaar gesteld en niet rechtstreeks in config.yml opgeslagen.
Rentalinstellingen
rental: evacuation-hours: 72 warnings: - 168 - 72 - 24
De standaard ontruimingsperiode bedraagt 72 uur.
De waarschuwingen worden standaard 168, 72 en 24 uur voor het einde van de huurperiode verstuurd.
Standaardlimieten
limits: default: house: 1 shop: 1 hotel: 1
Deze waarden kunnen later worden uitgebreid met permission-gebaseerde limieten.
๐ Afhankelijkheden
Verplichte platformafhankelijkheid
- Paper 26.2
- Java 25
Verplichte plugin-afhankelijkheden
- WorldGuard
- WorldEdit
- Vault
- LuckPerms
Shopintegratie
- ChestShop 3.12.2
Database
- MariaDB
- MariaDB Java Client
- HikariCP
๐ก๏ธ Beveiliging
TulpenCraftRentals verwerkt onder andere:
- Minecraft UUID's;
- huurcontracten;
- toegangsrechten;
- transacties;
- auditinformatie.
De database moet daarom uitsluitend vanaf geautoriseerde systemen bereikbaar zijn.
De Minecraft-server maakt verbinding met MariaDB via een afzonderlijke databasegebruiker.
Aanbevolen configuratie:
- aparte database voor TulpenCraftRentals;
- aparte MariaDB-user;
- alleen benodigde databaseprivileges;
- verbinding vanaf uitsluitend geautoriseerde Minecraft-servers;
- databasewachtwoord niet in Git opslaan.
De plugin gebruikt geen ranknamen in de Java-code. Toegangscontrole gebeurt via permissions en LuckPerms.
โ ๏ธ Aandachtspunten
- Een rental is altijd gekoppeld aan een WorldGuard-regio.
- Een verlopen huurcontract is geen automatische verlenging.
- De maximale ontruimingsperiode bedraagt 72 uur.
- De huurder is verantwoordelijk voor het verwijderen van eigendommen.
- Achtergebleven items worden tijdens de reset verwijderd.
- Vroegtijdig opzeggen geeft geen recht op restitutie.
- ChestShops zijn uitsluitend toegestaan binnen SHOP-rentals.
- Het maximale aantal ChestShops wordt per rental bewaakt.
- Een mislukte reset maakt een rental niet automatisch beschikbaar.
- Database-I/O mag niet blokkerend op de Minecraft-serverthread worden uitgevoerd.
๐งช Troubleshooting
Plugin wordt niet geladen
Controleer eerst:
/plugins
Controleer vervolgens:
grep -i "TulpenCraftRentals" logs/latest.log
Controleer de Java-versie:
java -version
TulpenCraftRentals vereist Java 25.
Databaseverbinding mislukt
Controleer:
- MariaDB-host;
- MariaDB-poort;
- databasenaam;
- username;
- wachtwoord;
- MariaDB grants;
- firewall;
- netwerkverbinding.
Test vanaf de Minecraft-server:
mariadb -h 172.16.0.30 -P 3306 -u rentals -p tulpencraft_rentals
De MariaDB-user moet verbinding mogen maken vanaf het IP-adres van de Minecraft-server.
`/huur` bestaat niet
Controleer of TulpenCraftRentals geladen is:
/plugins
Controleer daarnaast plugin.yml en de serverlog.
De primaire command is:
/huur
Alias:
/huren
Rental kan niet worden aangemaakt
Controleer:
- of de WorldGuard-regio bestaat;
- of de rental-ID uniek is;
- of het opgegeven rentaltype geldig is;
- of de uitvoerende speler voldoende rechten heeft.
ChestShop kan niet worden aangemaakt
Controleer:
- of de rental van het type
SHOPis; - of de speler huurder of geautoriseerde medewerker is;
- of de ChestShop binnen de gekoppelde regio staat;
- of het maximum aantal ChestShops nog niet is bereikt.
Rental blijft op RESETTING staan
Dit betekent dat de reset niet succesvol is afgerond.
Controleer de serverlog en resetstatus:
/huur beheer reset status <id>
Een rental mag pas opnieuw beschikbaar worden gemaakt nadat de oorzaak van de resetfout is opgelost.
๐งช Ontwikkelstatus
De plugin wordt gefaseerd ontwikkeld.
| Onderdeel | Status |
|---|---|
| Basis plugin | ๐ข |
| Maven build | ๐ข |
| Java 25 | ๐ข |
| Paper 26.2 | ๐ข |
| MariaDB verbinding | ๐ข |
| Database-schema | ๐ข |
| Rental model | ๐ข |
/huur command | ๐ก |
| Rental CRUD | ๐ก |
| WorldGuard-integratie | ๐ก |
| Vault economy | ๐ด |
| LuckPerms-integratie | ๐ด |
| Rental GUI | ๐ด |
| Preview | ๐ด |
| House members | ๐ด |
| Shop employees | ๐ด |
| ChestShop-integratie | ๐ด |
| Hotelkamers | ๐ด |
| Expiration scheduler | ๐ด |
| 72 uur ontruiming | ๐ด |
| WorldEdit reset | ๐ด |
| Discord notificaties | ๐ด |
| Audit logging | ๐ก |
Legenda:
- ๐ข = geรฏmplementeerd
- ๐ก = gedeeltelijk / in ontwikkeling
- ๐ด = nog niet geรฏmplementeerd
๐ Onderhoud
Laatste wijziging: datum
Wijziging: Documentatie aangemaakt voor TulpenCraftRentals.
Status: ๐ก In ontwikkeling