Repository navigation
API Events
com.mki.partylink.api.PartyLinkEvents holds all server events. Register listeners once during mod initialization:
PartyLinkEvents.MEMBER_JOINED.register((party, memberId) -> {
LOGGER.info("{} joined {}", memberId, party.name());
});All events fire on the server thread. The party argument is a snapshot (PartyView) taken at the time of the event.
On Fabric the eight API 1 events are Fabric Events; every other event (and all events on Forge/NeoForge) is a PartyLinkEvent. Both have the same register(...) / invoker() methods, so your code is the same on every loader.
Return false to stop the action. The player gets the message "This action was blocked by another mod." (except for chat and pings, which are dropped silently). The first listener that returns false wins; later listeners are not called.
| Event | Callback | Fires before |
|---|---|---|
ALLOW_INVITE |
boolean allowInvite(ServerPlayer inviter, ServerPlayer target) |
an invite is sent |
ALLOW_JOIN |
boolean allowJoin(PartyView party, ServerPlayer player) |
a player joins (invite, /party join, API). party is null when a new party would be created |
ALLOW_LEAVE |
boolean allowLeave(PartyView party, ServerPlayer player) |
a player leaves voluntarily |
ALLOW_KICK |
boolean allowKick(PartyView party, UUID actorId, UUID targetId) |
a member is kicked (actorId is null for API kicks) |
ALLOW_CHAT |
boolean allowChat(PartyView party, ServerPlayer sender, String message) |
a party chat message is delivered |
ALLOW_TELEPORT |
boolean allowTeleport(ServerPlayer player, ServerPlayer target) |
a teleport request is created and again right before teleporting |
ALLOW_PING |
boolean allowPing(PartyView party, PartyPing ping) |
a ping (also death markers) is sent |
| Event | Callback | Description |
|---|---|---|
PARTY_DAMAGE |
PartyDamageDecision onPartyDamage(PartyView party, ServerPlayer attacker, ServerPlayer victim) |
Fires when a player hurts a member of the same party. Return ALLOW, DENY or DEFAULT (let the party PvP rule decide). The first non-DEFAULT answer wins |
MODIFY_SHARED_XP |
int modifySharedXp(PartyView party, ServerPlayer source, int amount) |
Fires before shared XP is split. Listeners are chained. Return 0 or less to cancel sharing (the collector keeps the orb as in vanilla) |
// No party PvP inside arenas, ever
PartyLinkEvents.PARTY_DAMAGE.register((party, attacker, victim) ->
Arena.contains(victim) ? PartyDamageDecision.DENY : PartyDamageDecision.DEFAULT);
// +50% shared XP for parties of 4 or more
PartyLinkEvents.MODIFY_SHARED_XP.register((party, source, amount) ->
party.size() >= 4 ? amount * 3 / 2 : amount);
// No teleports during a boss fight
PartyLinkEvents.ALLOW_TELEPORT.register((player, target) -> !BossFight.isActive(player));| Event | Callback | Since |
|---|---|---|
PARTY_CREATED |
onPartyCreated(PartyView party) |
1 |
PARTY_DISBANDED |
onPartyDisbanded(PartyView party) – last state before disbanding |
1 |
MEMBER_JOINED |
onMemberJoined(PartyView party, UUID memberId) |
1 |
MEMBER_LEFT |
onMemberLeft(PartyView party, UUID memberId) |
1 |
MEMBER_KICKED |
onMemberKicked(PartyView party, UUID actorId, UUID memberId) |
1 |
ROLE_CHANGED |
onRoleChanged(PartyView party, UUID memberId, PartyRole role) |
1 |
SETTINGS_CHANGED |
onSettingsChanged(PartyView party) – party rules changed |
1 |
SHARED_EXPERIENCE |
onSharedExperience(PartyXpShareContext context) – source, total, targets |
1 |
OWNER_CHANGED |
onOwnerChanged(PartyView party, UUID oldOwnerId, UUID newOwnerId) |
2 |
PARTY_RENAMED |
onPartyRenamed(PartyView party, String oldName, String newName) |
2 |
VISIBILITY_CHANGED |
onVisibilityChanged(PartyView party, boolean isPublic) |
2 |
CHAT_MESSAGE |
onChatMessage(PartyView party, ServerPlayer sender, String message) |
2 |
PING_SENT |
onPingSent(PartyView party, PartyPing ping) |
2 |
MEMBER_TELEPORTED |
onMemberTeleported(PartyView party, UUID playerId, UUID targetId) |
2 |
DATA_CHANGED |
onDataChanged(PartyView party, String key, String value) – value is null when removed |
2 |
OWNER_CHANGED fires for transfers and when the owner leaves or is removed and the party continues.
| Field | Description |
|---|---|
senderId, senderName
|
Who pinged (for DEATH: who died) |
type |
NORMAL, DANGER, TARGET, LOOT, DEATH
|
x, y, z
|
Marker position |
dimension |
Dimension id, e.g. minecraft:overworld
|
durationSeconds |
How long clients show it |
PartyLink by MKI · Documentation for version 2.0.0 · Changelog
Players
Server owners
Developers