All Downloads are FREE. Search and download functionalities are using the official Maven repository.

emu.grasscutter.game.InvokeHandler Maven / Gradle / Ivy

There is a newer version: 1.0.3-dev
Show newest version
package emu.grasscutter.game;

import java.util.ArrayList;
import java.util.List;
import emu.grasscutter.net.packet.GenshinPacket;
import emu.grasscutter.net.proto.ForwardTypeOuterClass.ForwardType;

public class InvokeHandler {
	private final List entryListForwardAll;
	private final List entryListForwardAllExceptCur;
	private final List entryListForwardHost;
	private final Class packetClass;
	
	public InvokeHandler(Class packetClass) {
		this.entryListForwardAll = new ArrayList<>();
		this.entryListForwardAllExceptCur = new ArrayList<>();
		this.entryListForwardHost = new ArrayList<>();
		this.packetClass = packetClass;
	}

	public synchronized void addEntry(ForwardType forward, T entry) {
		switch (forward) {
			case ForwardToAll:
				entryListForwardAll.add(entry);
				break;
			case ForwardToAllExceptCur:
			case ForwardToAllExistExceptCur:
				entryListForwardAllExceptCur.add(entry);
				break;
			case ForwardToHost:
				entryListForwardHost.add(entry);
				break;
			default:
				break;
		}
	}
	
	public synchronized void update(GenshinPlayer player) {
		if (player.getWorld() == null) {
			this.entryListForwardAll.clear();
			this.entryListForwardAllExceptCur.clear();
			this.entryListForwardHost.clear();
			return;
		}
		
		try {
			if (entryListForwardAll.size() > 0) {
				GenshinPacket packet = packetClass.getDeclaredConstructor(List.class).newInstance(this.entryListForwardAll);
				player.getScene().broadcastPacket(packet);
				this.entryListForwardAll.clear();
			}
			if (entryListForwardAllExceptCur.size() > 0) {
				GenshinPacket packet = packetClass.getDeclaredConstructor(List.class).newInstance(this.entryListForwardAllExceptCur);
				player.getScene().broadcastPacketToOthers(player, packet);
				this.entryListForwardAllExceptCur.clear();
			}
			if (entryListForwardHost.size() > 0) {
				GenshinPacket packet = packetClass.getDeclaredConstructor(List.class).newInstance(this.entryListForwardHost);
				player.getWorld().getHost().sendPacket(packet);
				this.entryListForwardHost.clear();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy