Add a OnDatapackSyncEvent, useful as a notification for modders to send extra data to the client (#7912)

This commit is contained in:
Silver_David authored and GitHub committed 2021-08-06 10:18:12 -07:00
1 parent 14c6fc3388
commit dbdc345d4a
4 files changed
+84 -2

No files matched your search

@@ -16,8 +16,11 @@
GameRules gamerules = serverlevel1.m_46469_();
boolean flag = gamerules.m_46207_(GameRules.f_46156_);
boolean flag1 = gamerules.m_46207_(GameRules.f_46145_);
@@ -160,6 +_,7 @@
@@ -158,8 +_,10 @@
servergamepacketlistenerimpl.m_141995_(new ClientboundChangeDifficultyPacket(leveldata.m_5472_(), leveldata.m_5474_()));
servergamepacketlistenerimpl.m_141995_(new ClientboundPlayerAbilitiesPacket(p_11263_.m_150110_()));
servergamepacketlistenerimpl.m_141995_(new ClientboundSetCarriedItemPacket(p_11263_.m_150109_().f_35977_));
+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.OnDatapackSyncEvent(this, p_11263_));
servergamepacketlistenerimpl.m_141995_(new ClientboundUpdateRecipesPacket(this.f_11195_.m_129894_().m_44051_()));
servergamepacketlistenerimpl.m_141995_(new ClientboundUpdateTagsPacket(this.f_11195_.m_129895_().m_144442_(this.f_11206_)));
+ net.minecraftforge.fmllegacy.network.NetworkHooks.syncCustomTagTypes(p_11263_, this.f_11195_.m_129895_());
@@ -110,9 +113,11 @@
}
@Nullable
@@ -786,6 +_,7 @@
@@ -785,7 +_,9 @@
playeradvancements.m_135981_(this.f_11195_.m_129889_());
}
+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.OnDatapackSyncEvent(this, null));
this.m_11268_(new ClientboundUpdateTagsPacket(this.f_11195_.m_129895_().m_144442_(this.f_11206_)));
+ net.minecraftforge.fmllegacy.network.NetworkHooks.syncCustomTagTypes(this.f_11195_.m_129895_());
ClientboundUpdateRecipesPacket clientboundupdaterecipespacket = new ClientboundUpdateRecipesPacket(this.f_11195_.m_129894_().m_44051_());
@@ -0,0 +1,43 @@
package net.minecraftforge.event;
import javax.annotation.Nullable;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.players.PlayerList;
import net.minecraftforge.eventbus.api.Event;
/**
* Fires when a player joins the server or when the reload command is ran,
* before tags and crafting recipes are sent to the client. Send datapack data
* to clients when this event fires.
*/
public class OnDatapackSyncEvent extends Event
{
private final PlayerList playerList;
@Nullable
private final ServerPlayer player;
public OnDatapackSyncEvent(PlayerList playerList, @Nullable ServerPlayer player)
{
this.playerList = playerList;
this.player = player;
}
/**
* @return The server's player list to get a view of all players.
*/
public PlayerList getPlayerList()
{
return this.playerList;
}
/**
* @return The player to sync datapacks to. Null when syncing for all players,
* such as when the reload command runs.
*/
@Nullable
public ServerPlayer getPlayer()
{
return this.player;
}
}
@@ -0,0 +1,32 @@
package net.minecraftforge.debug.misc;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import net.minecraft.server.level.ServerPlayer;
import net.minecraftforge.event.OnDatapackSyncEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
@Mod("send_datapacks_to_client")
@Mod.EventBusSubscriber
public class OnDatapackSynctEventTest
{
private static final Logger LOGGER = LogManager.getLogger();
@SubscribeEvent
protected static void onSendDataToClient(final OnDatapackSyncEvent event)
{
// Fire for a specific player on login
if (event.getPlayer() != null)
syncData(event.getPlayer());
// Fire for all players on /reload
else
event.getPlayerList().getPlayers().forEach(OnDatapackSynctEventTest::syncData);
}
private static void syncData(ServerPlayer player)
{
LOGGER.info("Sending modded datapack data to {}", player.getName().getString());
}
}
+2
View File
@@ -142,5 +142,7 @@ license="LGPL v2.1"
modId="overlay_layers_test"
[[mods]]
modId="entity_renderer_events_test"
[[mods]]
modId="send_datapacks_to_client"
# ADD ABOVE THIS LINE