Fix Api runtime error and add comments on how to fix in future

This commit is contained in:
James Seibel
2023-06-20 20:55:06 -05:00
parent d5c1b7669d
commit 56e4454e41
10 changed files with 62 additions and 28 deletions
@@ -2,6 +2,7 @@ package com.seibel.distanthorizons.api.methods.events.abstractEvents;
import com.seibel.distanthorizons.api.methods.events.interfaces.IDhApiEvent;
import com.seibel.distanthorizons.api.objects.events.DhApiEventDefinition;
import com.seibel.distanthorizons.coreapi.events.ApiEventDefinitionHandler;
/**
* @author James Seibel
@@ -23,7 +24,11 @@ public abstract class DhApiAfterDhInitEvent implements IDhApiEvent<Void>
this.afterDistantHorizonsInit();
return false;
}
/**
* Note: when creating new events, make sure to bind this definition in {@link ApiEventDefinitionHandler}
* Otherwise a bunch of runtime errors will be thrown.
*/
public final static DhApiEventDefinition EVENT_DEFINITION = new DhApiEventDefinition(false, true);
@Override
public final DhApiEventDefinition getEventDefinition() { return EVENT_DEFINITION; }
@@ -3,6 +3,7 @@ package com.seibel.distanthorizons.api.methods.events.abstractEvents;
import com.seibel.distanthorizons.api.methods.events.interfaces.IDhApiEvent;
import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiRenderParam;
import com.seibel.distanthorizons.api.objects.events.DhApiEventDefinition;
import com.seibel.distanthorizons.coreapi.events.ApiEventDefinitionHandler;
/**
* @author James Seibel
@@ -25,6 +26,10 @@ public abstract class DhApiAfterRenderEvent implements IDhApiEvent<DhApiAfterRen
return false;
}
/**
* Note: when creating new events, make sure to bind this definition in {@link ApiEventDefinitionHandler}
* Otherwise a bunch of runtime errors will be thrown.
*/
public final static DhApiEventDefinition EVENT_DEFINITION = new DhApiEventDefinition(false, false);
@Override
public final DhApiEventDefinition getEventDefinition() { return EVENT_DEFINITION; }
@@ -4,6 +4,7 @@ package com.seibel.distanthorizons.api.methods.events.abstractEvents;
import com.seibel.distanthorizons.api.methods.events.interfaces.IDhApiEvent;
import com.seibel.distanthorizons.api.objects.events.DhApiEventDefinition;
import com.seibel.distanthorizons.coreapi.events.ApiEventDefinitionHandler;
/**
* @author James Seibel
@@ -26,6 +27,10 @@ public abstract class DhApiBeforeDhInitEvent implements IDhApiEvent<Void>
return false;
}
/**
* Note: when creating new events, make sure to bind this definition in {@link ApiEventDefinitionHandler}
* Otherwise a bunch of runtime errors will be thrown.
*/
public final static DhApiEventDefinition EVENT_DEFINITION = new DhApiEventDefinition(false, true);
@Override
public final DhApiEventDefinition getEventDefinition() { return EVENT_DEFINITION; }
@@ -3,6 +3,7 @@ package com.seibel.distanthorizons.api.methods.events.abstractEvents;
import com.seibel.distanthorizons.api.methods.events.interfaces.IDhApiEvent;
import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiRenderParam;
import com.seibel.distanthorizons.api.objects.events.DhApiEventDefinition;
import com.seibel.distanthorizons.coreapi.events.ApiEventDefinitionHandler;
/**
* @author James Seibel
@@ -25,6 +26,10 @@ public abstract class DhApiBeforeRenderEvent implements IDhApiEvent<DhApiBeforeR
@Override
public final boolean fireEvent(EventParam input) { return this.beforeRender(input); }
/**
* Note: when creating new events, make sure to bind this definition in {@link ApiEventDefinitionHandler}
* Otherwise a bunch of runtime errors will be thrown.
*/
public final static DhApiEventDefinition EVENT_DEFINITION = new DhApiEventDefinition(true, false);
@Override
public final DhApiEventDefinition getEventDefinition() { return EVENT_DEFINITION; }
@@ -4,6 +4,7 @@ import com.seibel.distanthorizons.api.enums.EDhApiDetailLevel;
import com.seibel.distanthorizons.api.interfaces.data.IDhApiTerrainDataRepo;
import com.seibel.distanthorizons.api.methods.events.interfaces.IDhApiEvent;
import com.seibel.distanthorizons.api.objects.events.DhApiEventDefinition;
import com.seibel.distanthorizons.coreapi.events.ApiEventDefinitionHandler;
/**
* @author James Seibel
@@ -30,6 +31,10 @@ public abstract class DhApiDataFileChangedEvent implements IDhApiEvent<DhApiData
return false;
}
/**
* Note: when creating new events, make sure to bind this definition in {@link ApiEventDefinitionHandler}
* Otherwise a bunch of runtime errors will be thrown.
*/
public final static DhApiEventDefinition EVENT_DEFINITION = new DhApiEventDefinition(false, false);
@Override
public final DhApiEventDefinition getEventDefinition() { return EVENT_DEFINITION; }
@@ -3,6 +3,7 @@ package com.seibel.distanthorizons.api.methods.events.abstractEvents;
import com.seibel.distanthorizons.api.interfaces.world.IDhApiLevelWrapper;
import com.seibel.distanthorizons.api.methods.events.interfaces.IDhApiEvent;
import com.seibel.distanthorizons.api.objects.events.DhApiEventDefinition;
import com.seibel.distanthorizons.coreapi.events.ApiEventDefinitionHandler;
/**
* @author James Seibel
@@ -25,6 +26,10 @@ public abstract class DhApiLevelLoadEvent implements IDhApiEvent<DhApiLevelLoadE
return false;
}
/**
* Note: when creating new events, make sure to bind this definition in {@link ApiEventDefinitionHandler}
* Otherwise a bunch of runtime errors will be thrown.
*/
public final static DhApiEventDefinition EVENT_DEFINITION = new DhApiEventDefinition(false, false);
@Override
public final DhApiEventDefinition getEventDefinition() { return EVENT_DEFINITION; }
@@ -3,6 +3,7 @@ package com.seibel.distanthorizons.api.methods.events.abstractEvents;
import com.seibel.distanthorizons.api.interfaces.world.IDhApiLevelWrapper;
import com.seibel.distanthorizons.api.methods.events.interfaces.IDhApiEvent;
import com.seibel.distanthorizons.api.objects.events.DhApiEventDefinition;
import com.seibel.distanthorizons.coreapi.events.ApiEventDefinitionHandler;
/**
* @author James Seibel
@@ -25,6 +26,10 @@ public abstract class DhApiLevelSaveEvent implements IDhApiEvent<DhApiLevelSaveE
return false;
}
/**
* Note: when creating new events, make sure to bind this definition in {@link ApiEventDefinitionHandler}
* Otherwise a bunch of runtime errors will be thrown.
*/
public final static DhApiEventDefinition EVENT_DEFINITION = new DhApiEventDefinition(false, false);
@Override
public final DhApiEventDefinition getEventDefinition() { return EVENT_DEFINITION; }
@@ -3,6 +3,7 @@ package com.seibel.distanthorizons.api.methods.events.abstractEvents;
import com.seibel.distanthorizons.api.methods.events.interfaces.IDhApiEvent;
import com.seibel.distanthorizons.api.interfaces.world.IDhApiLevelWrapper;
import com.seibel.distanthorizons.api.objects.events.DhApiEventDefinition;
import com.seibel.distanthorizons.coreapi.events.ApiEventDefinitionHandler;
/**
* @author James Seibel
@@ -25,6 +26,10 @@ public abstract class DhApiLevelUnloadEvent implements IDhApiEvent<DhApiLevelUnl
return false;
}
/**
* Note: when creating new events, make sure to bind this definition in {@link ApiEventDefinitionHandler}
* Otherwise a bunch of runtime errors will be thrown.
*/
public final static DhApiEventDefinition EVENT_DEFINITION = new DhApiEventDefinition(false, false);
@Override
public final DhApiEventDefinition getEventDefinition() { return EVENT_DEFINITION; }
@@ -118,36 +118,29 @@ public class ApiEventInjector extends DependencyInjector<IDhApiEvent> implements
@Override
public <T, U extends IDhApiEvent<T>> boolean fireAllEvents(Class<U> abstractEvent, T eventParameterObject)
{
try {
boolean cancelEvent = false;
// if this is a one time event, record that it was called
if (ApiEventDefinitionHandler.INSTANCE.getEventDefinition(abstractEvent).isOneTimeEvent &&
!this.firedOneTimeEventParamsByEventInterface.containsKey(abstractEvent)) {
this.firedOneTimeEventParamsByEventInterface.put(abstractEvent, eventParameterObject);
}
// fire each bound event
ArrayList<U> eventList = this.getAll(abstractEvent);
for (IDhApiEvent<T> event : eventList) {
if (event != null) {
try {
// fire each event and record if any of them
// request to cancel the event.
cancelEvent |= event.fireEvent(eventParameterObject);
} catch (Exception e) {
LOGGER.error("Exception thrown by event handler [" + event.getClass().getSimpleName() + "] for event type [" + abstractEvent.getSimpleName() + "], error:" + e.getMessage(), e);
}
boolean cancelEvent = false;
// if this is a one time event, record that it was called
if (ApiEventDefinitionHandler.INSTANCE.getEventDefinition(abstractEvent).isOneTimeEvent &&
!this.firedOneTimeEventParamsByEventInterface.containsKey(abstractEvent)) {
this.firedOneTimeEventParamsByEventInterface.put(abstractEvent, eventParameterObject);
}
// fire each bound event
ArrayList<U> eventList = this.getAll(abstractEvent);
for (IDhApiEvent<T> event : eventList) {
if (event != null) {
try {
// fire each event and record if any of them
// request to cancel the event.
cancelEvent |= event.fireEvent(eventParameterObject);
} catch (Exception e) {
LOGGER.error("Exception thrown by event handler [" + event.getClass().getSimpleName() + "] for event type [" + abstractEvent.getSimpleName() + "], error:" + e.getMessage(), e);
}
}
return cancelEvent;
}
catch (Throwable e)
{
//LOGGER.error("Exception thrown while firing events for event type [" + abstractEvent.getSimpleName() + "], error:" + e.getMessage(), e);
return false;
}
return cancelEvent;
}
}
@@ -58,6 +58,7 @@ public class ApiEventDefinitionHandler
this.setEventDefinition(DhApiLevelLoadEvent.class, DhApiLevelLoadEvent.EVENT_DEFINITION);
this.setEventDefinition(DhApiLevelSaveEvent.class, DhApiLevelSaveEvent.EVENT_DEFINITION);
this.setEventDefinition(DhApiLevelUnloadEvent.class, DhApiLevelUnloadEvent.EVENT_DEFINITION);
this.setEventDefinition(DhApiDataFileChangedEvent.class, DhApiDataFileChangedEvent.EVENT_DEFINITION);
}