throw exception on non-failthrough events registered as failthrough

This commit is contained in:
dfsek 2021-07-21 22:12:16 -07:00
parent 2175ea849f
commit 2ea16f68a2
2 changed files with 11 additions and 6 deletions

View File

@ -2,6 +2,7 @@ package com.dfsek.terra.event;
import com.dfsek.terra.api.addon.TerraAddon; import com.dfsek.terra.api.addon.TerraAddon;
import com.dfsek.terra.api.event.events.Event; import com.dfsek.terra.api.event.events.Event;
import com.dfsek.terra.api.event.events.FailThroughEvent;
import com.dfsek.terra.api.event.events.PackEvent; import com.dfsek.terra.api.event.events.PackEvent;
import com.dfsek.terra.api.event.functional.EventContext; import com.dfsek.terra.api.event.functional.EventContext;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -18,14 +19,14 @@ public class EventContextImpl<T extends Event> implements EventContext<T>, Compa
private final TerraAddon addon; private final TerraAddon addon;
public EventContextImpl(TerraAddon addon) { private final Class<? extends Event> eventClass;
public EventContextImpl(TerraAddon addon, Class<? extends Event> eventClass) {
this.addon = addon; this.addon = addon;
this.eventClass = eventClass;
} }
public void handle(T event) { public void handle(T event) {
if(event instanceof PackEvent) {
}
actions.forEach(action -> action.accept(event)); actions.forEach(action -> action.accept(event));
} }
@ -43,6 +44,9 @@ public class EventContextImpl<T extends Event> implements EventContext<T>, Compa
@Override @Override
public EventContext<T> failThrough() { public EventContext<T> failThrough() {
if(!FailThroughEvent.class.isAssignableFrom(eventClass)) {
throw new IllegalStateException("Cannot fail-through on event which does not implement FailThroughEvent: " + eventClass.getCanonicalName());
}
this.failThrough = true; this.failThrough = true;
return this; return this;
} }

View File

@ -52,14 +52,15 @@ public class FunctionalEventHandlerImpl implements FunctionalEventHandler {
@Override @Override
public <T extends Event> EventContext<T> register(TerraAddon addon, Class<T> clazz) { public <T extends Event> EventContext<T> register(TerraAddon addon, Class<T> clazz) {
EventContextImpl<T> eventContext = new EventContextImpl<>(addon); EventContextImpl<T> eventContext = new EventContextImpl<>(addon, clazz);
contextMap.computeIfAbsent(clazz, c -> new ArrayList<>()).add(eventContext); contextMap.computeIfAbsent(clazz, c -> new ArrayList<>()).add(eventContext);
return eventContext; return eventContext;
} }
@SuppressWarnings("unchecked")
@Override @Override
public <T extends Event> EventContext<T> register(TerraAddon addon, TypeKey<T> clazz) { public <T extends Event> EventContext<T> register(TerraAddon addon, TypeKey<T> clazz) {
EventContextImpl<T> eventContext = new EventContextImpl<>(addon); EventContextImpl<T> eventContext = new EventContextImpl<>(addon, (Class<T>) clazz.getRawType());
contextMap.computeIfAbsent(clazz.getType(), c -> new ArrayList<>()).add(eventContext); contextMap.computeIfAbsent(clazz.getType(), c -> new ArrayList<>()).add(eventContext);
return eventContext; return eventContext;
} }