Change donation perk element sync to per-dimension and use EntityJoinWorldEvent instead of PlayerLoggedInEvent, fixes #541

This commit is contained in:
Electroblob77
2021-01-03 23:42:27 +00:00
parent 5b3aebaba1
commit f81ad670ed
@@ -9,9 +9,9 @@ import electroblob.wizardry.packet.WizardryPacketHandler;
import electroblob.wizardry.util.Box; import electroblob.wizardry.util.Box;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import java.util.List; import java.util.List;
@@ -62,7 +62,7 @@ public class DonationPerksHandler {
Box<Element> box = DONOR_UUID_MAP.get(player.getUniqueID()); Box<Element> box = DONOR_UUID_MAP.get(player.getUniqueID());
if(box != null && box.get() != element){ if(box != null && box.get() != element){
box.set(element); box.set(element);
syncAll(); syncAll(player.dimension);
} }
} }
@@ -73,11 +73,11 @@ public class DonationPerksHandler {
return box == null ? null : box.get(); return box == null ? null : box.get();
} }
/** Sends the current donor perk information to all connected players (server-side only). */ /** Sends the current donor perk information to all players in the given dimension (server-side only). */
private static void syncAll(){ private static void syncAll(int dimension){
Wizardry.logger.info("Sending global donation perk settings to all players"); Wizardry.logger.info("Sending global donation perk settings to all players");
PacketSyncDonationPerks.Message packet = new PacketSyncDonationPerks.Message(DONOR_UUID_MAP.values().stream().map(Box::get).collect(Collectors.toList())); PacketSyncDonationPerks.Message packet = new PacketSyncDonationPerks.Message(DONOR_UUID_MAP.values().stream().map(Box::get).collect(Collectors.toList()));
WizardryPacketHandler.net.sendToAll(packet); WizardryPacketHandler.net.sendToDimension(packet, dimension);
} }
/** Sends the current donor perk information to the given player (server-side only). */ /** Sends the current donor perk information to the given player (server-side only). */
@@ -95,13 +95,13 @@ public class DonationPerksHandler {
} }
@SubscribeEvent @SubscribeEvent
public static void onPlayerLoggedInEvent(PlayerLoggedInEvent event){ public static void onEntityJoinWorldEvent(EntityJoinWorldEvent event){
if(event.player instanceof EntityPlayerMP){ if(event.getEntity() instanceof EntityPlayerMP){
// Send donation perks to anyone who logs in // Send donation perks to anyone who logs in
syncWith((EntityPlayerMP)event.player); syncWith((EntityPlayerMP)event.getEntity());
}else{ }else if(event.getEntity() instanceof EntityPlayer){
// Send donation perks setting to the server if the player is a donor // Send donation perks setting to the server if the player is a donor
if(isDonor(event.player)) sendToServer(event.player); if(isDonor((EntityPlayer)event.getEntity())) sendToServer((EntityPlayer)event.getEntity());
} }
} }