1
0
mirror of https://github.com/chylex/Hardcore-Ender-Expansion.git synced 2025-04-10 20:15:42 +02:00

Work on Causatum Events (player and state handling, utility methods)

This commit is contained in:
chylex 2015-11-11 18:45:22 +01:00
parent bedeff0d5b
commit 49bf96813c
2 changed files with 43 additions and 17 deletions
src/main/java/chylex/hee/mechanics/causatum

View File

@ -2,6 +2,8 @@ package chylex.hee.mechanics.causatum;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import net.minecraft.entity.player.EntityPlayer;
import chylex.hee.game.save.handlers.PlayerDataHandler;
import chylex.hee.mechanics.causatum.events.CausatumEventInstance;
import chylex.hee.mechanics.causatum.events.CausatumEventInstance.EventState;
import cpw.mods.fml.common.FMLCommonHandler;
@ -16,6 +18,11 @@ public final class CausatumEventHandler{
if (instance == null)FMLCommonHandler.instance().bus().register(instance = new CausatumEventHandler());
}
protected static boolean hasActiveEvent(EntityPlayer player){
CausatumEventInstance inst = instance.activeEvents.get(PlayerDataHandler.getID(player));
return inst != null && inst.getState() == EventState.WAITING;
}
private Map<String,CausatumEventInstance> activeEvents = new HashMap<>(4);
private CausatumEventHandler(){}
@ -26,7 +33,10 @@ public final class CausatumEventHandler{
if (!activeEvents.isEmpty()){
for(Iterator<CausatumEventInstance> iter = activeEvents.values().iterator(); iter.hasNext();){
if (iter.next().updateEvent() == EventState.FINISHED)iter.remove();
CausatumEventInstance inst = iter.next();
inst.updateEvent();
if (inst.getState() == EventState.FINISHED)iter.remove();
}
}
}

View File

@ -3,7 +3,7 @@ import java.util.List;
import java.util.function.BiFunction;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.management.ServerConfigurationManager;
import chylex.hee.game.save.SaveData;
@ -18,15 +18,15 @@ public abstract class CausatumEventInstance{
public final short requiredLevel;
private final Progress minProgress, maxProgress;
private final BiFunction<EventTypes,EntityPlayer,CausatumEventInstance> eventConstructor;
private final BiFunction<EventTypes,EntityPlayerMP,CausatumEventInstance> eventConstructor;
private EventTypes(BiFunction<EventTypes,EntityPlayer,CausatumEventInstance> eventConstructor){
private EventTypes(BiFunction<EventTypes,EntityPlayerMP,CausatumEventInstance> eventConstructor){
this.requiredLevel = -1;
this.minProgress = this.maxProgress = null;
this.eventConstructor = eventConstructor;
}
private EventTypes(int requiredLevel, Progress minProgress, Progress maxProgress, BiFunction<EventTypes,EntityPlayer,CausatumEventInstance> eventConstructor){
private EventTypes(int requiredLevel, Progress minProgress, Progress maxProgress, BiFunction<EventTypes,EntityPlayerMP,CausatumEventInstance> eventConstructor){
this.requiredLevel = (short)requiredLevel;
this.minProgress = minProgress;
this.maxProgress = maxProgress;
@ -41,7 +41,7 @@ public abstract class CausatumEventInstance{
return (minProgress == null || maxProgress == null || new Range(minProgress.ordinal(),maxProgress.ordinal()).in(currentProgress.ordinal())) && (requiredLevel == -1 || level >= requiredLevel);
}
public CausatumEventInstance createEvent(EntityPlayer player){
public CausatumEventInstance createEvent(EntityPlayerMP player){
return eventConstructor.apply(this,player);
}
}
@ -52,38 +52,54 @@ public abstract class CausatumEventInstance{
private final EventTypes eventType;
private final String playerID;
private @Nullable EntityPlayer player;
private @Nonnull EventState state = EventState.WAITING, prevState = state;
private @Nullable EntityPlayerMP player;
private @Nonnull EventState state = EventState.WAITING;
CausatumEventInstance(EventTypes eventType, EntityPlayer player){
CausatumEventInstance(EventTypes eventType, EntityPlayerMP player){
this.eventType = eventType;
this.playerID = PlayerDataHandler.getID(player);
this.player = player;
}
protected final @Nullable EntityPlayer getPlayer(){
protected final @Nullable EntityPlayerMP getPlayer(){
return player;
}
protected final void updateState(@Nonnull EventState state){
if (state == prevState)return;
if (state.ordinal() <= this.state.ordinal())return;
this.state = state;
if (state == EventState.SATISFIED)SaveData.player(playerID,CausatumFile.class).finishEvent(eventType);
}
public EventState updateEvent(){
if (player == null){
ServerConfigurationManager manager = MinecraftServer.getServer().getConfigurationManager();
if (manager != null)player = ((List<EntityPlayer>)manager.playerEntityList).stream().filter(entity -> playerID.equals(PlayerDataHandler.getID(entity))).findFirst().orElse(null);
public void updateEvent(){
if (player != null){ // TODO test all
if (!player.playerNetServerHandler.netManager.isChannelOpen()){
onPlayerDisconnected();
player = null;
}
else if (player.isDead){
onPlayerDied();
player = null;
}
else if (!player.worldObj.playerEntities.contains(player)){
onPlayerChangedDimension();
player = null;
}
}
// TODO
if (player == null){
ServerConfigurationManager manager = MinecraftServer.getServer().getConfigurationManager();
if (manager != null)player = ((List<EntityPlayerMP>)manager.playerEntityList).stream().filter(entity -> playerID.equals(PlayerDataHandler.getID(entity))).findFirst().orElse(null);
}
}
public final EventState getState(){
return state;
}
protected abstract void onUpdate();
protected abstract void onPlayerDisconnected();
protected abstract void onPlayerDied();
protected abstract void onPlayerChangedDimension();
}