Zoeken…


Een gebeurtenislistener maken in Forge

Het maken van een gebeurtenislistener in Forge lijkt erg op het maken van een gebeurtenis in Bukket.

Het creëren van de luisteraar vereist veel minder. Er is geen interface om te implementeren of andere invoer.

public class ListenerClass { } //perfectly valid event listener class

Om dit te registreren moet de instantie worden doorgegeven aan de Forge-evenementenbus:

MinecraftForge.EVENT_BUS.register(new ListenerClass());

Er zijn een paar verschillende evenementbussen, afhankelijk van het evenement. Ertsgebeurtenissen worden bijvoorbeeld afgevuurd op de ORE_GEN_BUS . U kunt deze registratie vanaf elke locatie bellen, maar het is raadzaam om deze te bellen vanuit uw hoofdmod-klasse (met de @Mod-annotatie) of vanuit een proxyklasse (sommige evenementen zijn alleen client-side en een client-side event-handler moet alleen worden opgeroepen van de client-proxy, anders crasht de dedicated server!)

Als u naar een bepaalde gebeurtenis in uw luisteraarklasse wilt luisteren, moet u een methode maken met annotatie bij @SubscribeEvent op de methode. Het gebeurtenistype wordt gespecificeerd door het Type in het enige argument van de methode. De methode kan elke gewenste naam krijgen.

Merk op dat sommige gebeurtenistypen subtypen zijn (waarnaar moet worden verwezen door hun omhullende type, bijv. CropGrowEvent.Pre ) en dat sommige gebeurtenissen een fase kunnen hebben omdat deze op meer dan één plaats wordt afgevuurd (zoals alle TickEvent s die beide eerder zijn afgevuurd) en tenslotte vanillecode). Als modder moet je altijd op beide dingen controleren en je code alleen uitvoeren als dat nodig is.

public class ListenerClass {
    @SubscribeEvent
    public void onPlayerLogin(PlayerLoggedInEvent event) {
        event.player.addChatMessage(new TextComponentString("Welcome to the server!"));
    }
}

Omdat Forge mods rechtstreeks interageren met Minecraft-internals, wordt de modder veel macht gegeven om dingen te beïnvloeden, maar op dezelfde manier moet de code het vanillekader volgen: er zijn geen snelkoppelingen voor het verzenden van berichten, het bericht moet worden opgebouwd uit ITextComponents handmatig, maar de mogelijkheid om deze objecten te manipuleren (zoals het toepassen van kleuropmaak) is veel eenvoudiger. Bijvoorbeeld:

TextComponentString txt = new TextComponentString(
    TextFormatting.LIGHT_PURPLE + "Welcome to the server!");
txt.appendSibling(new TextComponentString(
    TextFormatting.AQUA + "Server has been online for " + x + " days"));
event.player.addChatMessage(txt);

Dat geeft het volgende resultaat: Chat bericht



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow