02 / Praktiske mønstre
Guides
Her samler vi de integrationer, du typisk bygger oven på MineCore.
Event-livscyklus
MineCore bruger events til at beskrive hele rejsen fra en request bliver bygget, til den er oprettet og modtaget af serveren. Votes følger deres egen modtagelsesflow.
Det samlede flow
1. Før requesten oprettes
PreCreateRequestEvent bliver sendt med en StoreRequest, før requesten oprettes. Brug eventet til at validere eller stoppe requesten, hvis den ikke må sendes.
public void onPreCreate(PreCreateRequestEvent event) {
StoreRequest request = event.getStoreRequest();
if (!isAllowed(request)) {
event.setCancelled(true);
}
}Hvis eventet bliver annulleret, returnerer callEvent() true, og requesten bør ikke fortsætte.
2. Efter requesten er oprettet
PostCreateRequestEvent bliver sendt, når requesten er oprettet. Her får du en StoreCreatedRequest, som indeholder den oprettede requests ID og kan gemmes til senere sporing.
public void onPostCreate(PostCreateRequestEvent event) {
StoreCreatedRequest request = event.getStoreRequest();
saveRequestId(request.getId());
}3. Når serveren modtager en request
ReceiveRequestEvent betyder, at serveren har modtaget en request fra MineClub. Eventet har både en type og en StoreCreatedRequest. Brug typen til at skelne mellem request-typer, og udfør først belønningen, når requestens data er valideret.
public void onReceiveRequest(ReceiveRequestEvent event) {
StoreCreatedRequest request = event.getStoreRequest();
if ("purchase".equals(event.getType()) && isValid(request)) {
giveProducts(request);
MineCoreApi.getInstance()
.getMinecoreRequestManager()
.acceptRequest(request);
}
}Gem ikke belønningen som gennemført, før din egen behandling er lykkedes. Det gør det lettere at håndtere genforsøg uden at give den samme belønning flere gange.
Samme livscyklus i Skript
Skript-hook’et bruger de samme fire trin, men med Skript-events. Du kan derfor bygge requesten, reagere før og efter oprettelsen og til sidst håndtere den request eller det vote, serveren modtager.
Opret requesten
create a minecore request for player:
add product "my-product" named "My Product" price 10
add product "premium" named "Premium" price 20 quantity 1Før requesten oprettes
Brug pre create request til at kontrollere requesten, før den sendes. I en Skript-hook, der understøtter event-cancellation, kan du stoppe flowet med cancel event.
on minecore pre create request:
if <din validering fejler>:
cancel event
log "MineCore request blev stoppet"Efter requesten oprettes
on minecore post create request:
log "MineCore request blev oprettet"
log "Request: %event-request%"Modtag køb og votes
on minecore receive request:
log "Modtog request: %event-type%"
accept minecore request event-request
on minecore receive vote:
log "Modtog vote"
accept minecore vote event-voteBrug event-request og event-vote i accept-effects, når du vil markere den aktuelle request eller vote som behandlet. Kontrollér altid dine egne belønninger før accept, så genforsøg ikke giver dobbelt belønning.
4. Når serveren modtager et vote
ReceiveVoteEvent indeholder et MappedVote. Giv spillerens vote-belønning, og kald derefter acceptVote. Hvis vote-data ikke kan behandles, skal du bruge rejectVote.
public void onReceiveVote(ReceiveVoteEvent event) {
MappedVote vote = event.getVote();
if (alreadyProcessed(vote)) {
return;
}
giveVoteReward(vote);
markAsProcessed(vote);
MineCoreApi.getInstance()
.getMinecoreRequestManager()
.acceptVote(vote);
}Async event bus
Event-klasserne sender sig selv via MineCoreApi.getInstance().getAsyncEventBus().post(this). Behandl derfor handlers som asynkrone: undgå direkte Bukkit- eller world-operationer fra event-handleren, og hop over på serverens scheduler, når en handling kræver main thread.
Se API-reference for eventernes felter og managers, eller Skript-hooks for den samme livscyklus i Skript.
