use of org.spongepowered.api.event.Cause in project SpongeCommon by SpongePowered.
the class QueryThreadGs4Mixin method impl$basicSendTo.
// @formatter:on
@Redirect(method = "processPacket", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/rcon/thread/QueryThreadGs4;sendTo([BLjava/net/DatagramPacket;)V"))
public void impl$basicSendTo(QueryThreadGs4 query, byte[] param0, DatagramPacket datagramPacket) throws IOException {
final Cause currentCause = Sponge.server().causeStackManager().currentCause();
final QueryServerEvent.Basic event = SpongeEventFactory.createQueryServerEventBasic(currentCause, (InetSocketAddress) datagramPacket.getSocketAddress(), "SMP", this.worldName, this.serverName, this.maxPlayers, this.serverInterface.getPlayerCount());
Sponge.eventManager().post(event);
NetworkDataOutputStream var3 = new NetworkDataOutputStream(1460);
var3.write(0);
var3.writeBytes(this.shadow$getIdentBytes(event.address()));
var3.writeString(event.motd());
var3.writeString(event.gameType());
var3.writeString(event.map());
var3.writeString(Integer.toString(event.playerCount()));
var3.writeString(Integer.toString(event.maxPlayerCount()));
var3.writeShort((short) this.serverPort);
var3.writeString(this.hostIp);
this.shadow$sendTo(var3.toByteArray(), datagramPacket);
}
use of org.spongepowered.api.event.Cause in project SpongeCommon by SpongePowered.
the class SpongeInventoryMenu method onClose.
public void onClose(Player player, Container container) {
if (this.closeHandler != null) {
try (CauseStackManager.StackFrame frame = PhaseTracker.getCauseStackManager().pushCauseFrame()) {
frame.pushCause(player);
Cause cause = frame.currentCause();
this.closeHandler.handle(cause, container);
}
}
this.tracked.remove(container);
}
use of org.spongepowered.api.event.Cause in project SpongeCommon by SpongePowered.
the class CommandSourceStackMixin_API method rotation.
@Override
public Optional<Vector3d> rotation() {
final Cause cause = this.cause();
final EventContext eventContext = cause.context();
if (eventContext.containsKey(EventContextKeys.ROTATION)) {
return eventContext.get(EventContextKeys.ROTATION);
}
return cause.first(Entity.class).map(Entity::rotation);
}
use of org.spongepowered.api.event.Cause in project SpongeCommon by SpongePowered.
the class CommandSourceStackMixin_API method location.
@Override
public Optional<ServerLocation> location() {
final Cause cause = this.cause();
final EventContext eventContext = cause.context();
if (eventContext.containsKey(EventContextKeys.LOCATION)) {
return eventContext.get(EventContextKeys.LOCATION);
}
final Optional<ServerLocation> optionalLocation = this.targetBlock().flatMap(BlockSnapshot::location);
if (optionalLocation.isPresent()) {
return optionalLocation;
}
return cause.first(Locatable.class).map(Locatable::serverLocation);
}
use of org.spongepowered.api.event.Cause in project SpongeCommon by SpongePowered.
the class ServerPlayerMixin_API method simulateChat.
@Override
public PlayerChatEvent simulateChat(final Component message, final Cause cause) {
Objects.requireNonNull(message, "message");
Objects.requireNonNull(cause, "cause");
final PlayerChatFormatter originalRouter = this.chatFormatter();
final Audience audience = (Audience) this.server;
final PlayerChatEvent event = SpongeEventFactory.createPlayerChatEvent(cause, audience, Optional.of(audience), originalRouter, Optional.of(originalRouter), message, message);
if (!SpongeCommon.post(event)) {
event.chatFormatter().ifPresent(formatter -> event.audience().map(SpongeAdventure::unpackAudiences).ifPresent(targets -> {
for (final Audience target : targets) {
formatter.format(this, target, event.message(), event.originalMessage()).ifPresent(formattedMessage -> target.sendMessage(this, formattedMessage));
}
}));
}
return event;
}
Aggregations