Files
Minigames/src/main/java/eu/mhsl/minenet/minigames/instance/MineNetInstance.java
2025-10-16 00:58:52 +02:00

72 lines
2.3 KiB
Java

package eu.mhsl.minenet.minigames.instance;
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
import net.minestom.server.MinecraftServer;
import net.minestom.server.entity.Player;
import net.minestom.server.event.instance.AddEntityToInstanceEvent;
import net.minestom.server.event.instance.RemoveEntityFromInstanceEvent;
import net.minestom.server.instance.Instance;
import net.minestom.server.instance.InstanceContainer;
import net.minestom.server.registry.DynamicRegistry;
import net.minestom.server.timer.TaskSchedule;
import net.minestom.server.world.DimensionType;
import java.util.UUID;
public class MineNetInstance extends InstanceContainer {
public MineNetInstance(DynamicRegistry.Key<DimensionType> type) {
super(UUID.randomUUID(), type);
MinecraftServer.getInstanceManager().registerInstance(this);
this.eventNode()
.addListener(AddEntityToInstanceEvent.class, this::onEntityAdd)
.addListener(RemoveEntityFromInstanceEvent.class, this::onEntityRemove);
}
private void onEntityRemove(RemoveEntityFromInstanceEvent removeEntityFromInstanceEvent) {
if(removeEntityFromInstanceEvent.getEntity() instanceof Player p) {
this.onPlayerLeave(p);
}
}
private void onEntityAdd(AddEntityToInstanceEvent addEntityToInstanceEvent) {
if(addEntityToInstanceEvent.getEntity() instanceof Player p) {
addEntityToInstanceEvent.setCancelled(this.onPlayerJoin(p));
}
}
/**
* Called when Player joins this instance
*
* @param p player who is joining
* @return setCanceled
*/
protected boolean onPlayerJoin(Player p) {
return false;
}
/**
* Called when Player leaves this instance
*
* @param p player who is leaving
*/
protected void onPlayerLeave(Player p) {
}
public void destroy(Instance target) {
this.getPlayers().forEach(player -> {
if(target != null)
player.setInstance(target);
else
player.kick(TranslatedComponent.byId("sample").getAssembled(player));
});
MinecraftServer.getSchedulerManager().scheduleTask(
() -> MinecraftServer.getInstanceManager().unregisterInstance(this),
TaskSchedule.seconds(10),
TaskSchedule.stop()
);
}
}