feat(gestaltv7-eventsystem): Migration Event and @ReceiveEvent to gestalt's (#4898)

This commit is contained in:
Nail Khanipov 2021-12-05 16:19:57 +03:00 committed by GitHub
parent 502985ef9d
commit 1f0349f4d6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
201 changed files with 464 additions and 341 deletions

View file

@ -7,24 +7,25 @@
import org.junit.jupiter.api.Test;
import org.reflections.Reflections;
import org.terasology.engine.context.internal.ContextImpl;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.entity.internal.PojoEntityManager;
import org.terasology.engine.entitySystem.event.AbstractConsumableEvent;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.entitySystem.event.EventPriority;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.event.Priority;
import org.terasology.engine.entitySystem.event.internal.EventReceiver;
import org.terasology.engine.entitySystem.event.internal.EventSystemImpl;
import org.terasology.engine.entitySystem.metadata.ComponentLibrary;
import org.terasology.engine.entitySystem.metadata.EntitySystemLibrary;
import org.terasology.engine.entitySystem.prefab.internal.PojoPrefabManager;
import org.terasology.unittest.stubs.IntegerComponent;
import org.terasology.unittest.stubs.StringComponent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.persistence.typeHandling.TypeHandlerLibraryImpl;
import org.terasology.engine.registry.CoreRegistry;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import org.terasology.persistence.typeHandling.TypeHandlerLibrary;
import org.terasology.unittest.stubs.IntegerComponent;
import org.terasology.unittest.stubs.StringComponent;
import java.util.List;
@ -250,7 +251,8 @@ public static class TestHighPriorityEventHandler extends BaseComponentSystem {
List<Received> receivedList = Lists.newArrayList();
@ReceiveEvent(components = StringComponent.class, priority = EventPriority.PRIORITY_HIGH)
@Priority(EventPriority.PRIORITY_HIGH)
@ReceiveEvent(components = StringComponent.class)
public void handleStringEvent(TestEvent event, EntityRef entity) {
receivedList.add(new Received(event, entity));
if (cancel) {
@ -258,7 +260,8 @@ public void handleStringEvent(TestEvent event, EntityRef entity) {
}
}
@ReceiveEvent(components = IntegerComponent.class, priority = EventPriority.PRIORITY_HIGH)
@Priority(EventPriority.PRIORITY_HIGH)
@ReceiveEvent(components = IntegerComponent.class)
public void handleIntegerEvent(TestEvent event, EntityRef entity) {
receivedList.add(new Received(event, entity));
}

View file

@ -14,10 +14,10 @@
import org.terasology.engine.entitySystem.entity.EntityManager;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnActivatedComponent;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.logic.characters.events.CreateVisualCharacterEvent;
import org.terasology.engine.logic.players.LocalPlayer;
import org.terasology.engine.registry.InjectionHelper;
import org.terasology.gestalt.entitysystem.event.Event;
import java.util.ArrayList;
import java.util.Arrays;

View file

@ -8,7 +8,7 @@
import org.terasology.engine.TerasologyTestingEnvironment;
import org.terasology.engine.core.Time;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import java.util.ArrayList;
import java.util.Arrays;

View file

@ -11,15 +11,16 @@
import org.joml.Vector4fc;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.terasology.engine.core.module.ModuleManager;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.engine.context.internal.ContextImpl;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.core.module.ModuleManager;
import org.terasology.engine.entitySystem.metadata.EntitySystemLibrary;
import org.terasology.engine.entitySystem.metadata.EventMetadata;
import org.terasology.engine.persistence.serializers.EventSerializer;
import org.terasology.engine.persistence.typeHandling.TypeHandlerLibraryImpl;
import org.terasology.engine.registry.CoreRegistry;
import org.terasology.engine.testUtil.ModuleManagerFactory;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.persistence.typeHandling.TypeHandlerLibrary;
import org.terasology.protobuf.EntityData;
import org.terasology.reflection.ModuleTypeRegistry;
@ -27,7 +28,6 @@
import org.terasology.reflection.metadata.FieldMetadata;
import org.terasology.reflection.reflect.ReflectFactory;
import org.terasology.reflection.reflect.ReflectionReflectFactory;
import org.terasology.engine.testUtil.ModuleManagerFactory;
import java.io.IOException;
import java.util.HashMap;

View file

@ -13,8 +13,6 @@
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.entity.internal.PojoEntityManager;
import org.terasology.engine.entitySystem.event.AbstractConsumableEvent;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.event.internal.EventSystem;
import org.terasology.engine.entitySystem.metadata.EntitySystemLibrary;
import org.terasology.engine.entitySystem.prefab.internal.PojoPrefabManager;
@ -25,6 +23,8 @@
import org.terasology.engine.network.NetworkSystem;
import org.terasology.engine.persistence.typeHandling.TypeHandlerLibraryImpl;
import org.terasology.engine.registry.CoreRegistry;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import org.terasology.gestalt.module.ModuleEnvironment;
import org.terasology.persistence.typeHandling.TypeHandlerLibrary;
import org.terasology.reflection.TypeRegistry;

View file

@ -18,8 +18,6 @@
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnActivatedComponent;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnAddedComponent;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnChangedComponent;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.event.internal.EventReceiver;
import org.terasology.engine.entitySystem.event.internal.EventSystem;
import org.terasology.engine.entitySystem.prefab.Prefab;
@ -39,6 +37,8 @@
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.assets.management.AssetManager;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import org.terasology.unittest.stubs.ForceBlockActiveComponent;
import org.terasology.unittest.stubs.IntegerComponent;
import org.terasology.unittest.stubs.RetainedOnBlockChangeComponent;

View file

@ -12,7 +12,6 @@
import org.mockito.ArgumentCaptor;
import org.terasology.engine.entitySystem.entity.EntityManager;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.world.BlockEntityRegistry;
import org.terasology.engine.world.block.BeforeDeactivateBlocks;
import org.terasology.engine.world.block.Block;
@ -30,6 +29,7 @@
import org.terasology.fixtures.TestChunkStore;
import org.terasology.fixtures.TestStorageManager;
import org.terasology.fixtures.TestWorldGenerator;
import org.terasology.gestalt.entitysystem.event.Event;
import java.time.Duration;
import java.time.temporal.ChronoUnit;

View file

@ -15,7 +15,6 @@
import org.terasology.engine.core.subsystem.config.BindsManager;
import org.terasology.engine.core.subsystem.headless.device.TimeSystem;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.entitySystem.systems.internal.DoNotAutoRegister;
import org.terasology.engine.input.BindButtonEvent;
import org.terasology.engine.input.BindableButton;
@ -30,6 +29,7 @@
import org.terasology.engine.recording.DirectionAndOriginPosRecorderList;
import org.terasology.engine.recording.RecordAndReplayCurrentStatus;
import org.terasology.engine.registry.InjectionHelper;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.input.Keyboard.Key;
import org.terasology.input.Keyboard.KeyId;
import org.terasology.input.device.CharKeyboardAction;

View file

@ -11,7 +11,6 @@
import org.terasology.engine.audio.events.PlaySoundEvent;
import org.terasology.engine.audio.events.PlaySoundForOwnerEvent;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.entitySystem.systems.UpdateSubscriberSystem;
@ -25,6 +24,7 @@
import org.terasology.engine.network.NetworkSystem;
import org.terasology.engine.registry.In;
import org.terasology.engine.utilities.Assets;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
/**
* This system handles receiving the PlaySound events and activating the AudioManager to play them

View file

@ -10,7 +10,6 @@
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager;
import org.terasology.engine.entitySystem.entity.internal.PojoEntityManager;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.entitySystem.event.internal.EventSystem;
import org.terasology.engine.entitySystem.event.internal.EventSystemImpl;
import org.terasology.engine.entitySystem.metadata.ComponentLibrary;
@ -39,6 +38,7 @@
import org.terasology.engine.recording.RecordingEventSystemDecorator;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.gestalt.module.ModuleEnvironment;
import org.terasology.gestalt.naming.Name;
import org.terasology.nui.properties.OneOfProviderFactory;

View file

@ -4,12 +4,12 @@
package org.terasology.engine.core.bootstrap.eventSystem;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.entitySystem.event.internal.EventReceiver;
import org.terasology.engine.entitySystem.event.internal.EventSystem;
import org.terasology.engine.entitySystem.systems.ComponentSystem;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.entitysystem.event.Event;
public abstract class AbstractEventSystemDecorator implements EventSystem {
private final EventSystem eventSystem;

View file

@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.core.modes.loadProcesses;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.gestalt.module.sandbox.API;
/**

View file

@ -6,12 +6,12 @@
import org.terasology.engine.core.GameEngine;
import org.terasology.engine.core.modes.GameState;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.registry.In;
import org.terasology.engine.world.WorldComponent;
import org.terasology.engine.world.chunks.event.OnChunkLoaded;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
/**
* A system to send new chunk events to the current game state, which can be

View file

@ -50,6 +50,7 @@ public final class ExternalApiWhitelist {
private static final Set<String> GESTALT_ECS_PACKAGES = new ImmutableSet.Builder<String>()
.add("org.terasology.gestalt.entitysystem.component")
.add("org.terasology.gestalt.entitysystem.event")
.build();
public static final Set<String> PACKAGES = new ImmutableSet.Builder<String>()

View file

@ -6,9 +6,9 @@
import org.terasology.engine.entitySystem.MutableComponentContainer;
import org.terasology.engine.entitySystem.entity.internal.EntityScope;
import org.terasology.engine.entitySystem.entity.internal.NullEntityRef;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.entitySystem.prefab.Prefab;
import org.terasology.engine.entitySystem.sectors.SectorSimulationComponent;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* A wrapper around an entity id providing access to common functionality

View file

@ -6,13 +6,13 @@
import org.slf4j.LoggerFactory;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.entity.LowLevelEntityManager;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.entitySystem.prefab.Prefab;
import org.terasology.engine.entitySystem.sectors.SectorSimulationComponent;
import org.terasology.engine.network.NetworkComponent;
import org.terasology.engine.persistence.serializers.EntityDataJSONFormat;
import org.terasology.engine.persistence.serializers.EntitySerializer;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.entitysystem.event.Event;
import java.security.AccessController;
import java.security.PrivilegedAction;

View file

@ -3,9 +3,9 @@
package org.terasology.engine.entitySystem.entity.internal;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.entitySystem.prefab.Prefab;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.entitysystem.event.Event;
import java.util.Collections;
import java.util.List;

View file

@ -3,7 +3,7 @@
package org.terasology.engine.entitySystem.entity.lifecycleEvents;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* When a component is about to leave the active state, either due to being removed, the entity it is attached to being destroyed,

View file

@ -4,9 +4,9 @@
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.entitySystem.prefab.Prefab;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.entitysystem.event.Event;
import java.util.Iterator;
import java.util.Map;

View file

@ -3,7 +3,7 @@
package org.terasology.engine.entitySystem.entity.lifecycleEvents;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* When a component is about to be removed from an entity, or an entity is about to be destroyed, this event is sent.

View file

@ -3,7 +3,7 @@
package org.terasology.engine.entitySystem.entity.lifecycleEvents;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* This event occurs after an entity is created, an entity is loaded or a component is added to an entity. This occurs

View file

@ -3,7 +3,7 @@
package org.terasology.engine.entitySystem.entity.lifecycleEvents;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* This event is sent when an entity is created or a component added to an existing entity.

View file

@ -3,7 +3,7 @@
package org.terasology.engine.entitySystem.entity.lifecycleEvents;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* This event occurs whenever a component is changed and saved.

View file

@ -5,6 +5,7 @@
import gnu.trove.iterator.TFloatIterator;
import gnu.trove.list.TFloatList;
import gnu.trove.list.array.TFloatArrayList;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* A generic event for getting a value for a property.

View file

@ -0,0 +1,14 @@
// Copyright 2021 The Terasology Foundation
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.entitySystem.event;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
/**
* Additional for {@link ReceiveEvent}.
* Activate performance monitoring for Event Handler.
*/
public @interface Activity {
String value();
}

View file

@ -3,6 +3,8 @@
package org.terasology.engine.entitySystem.event;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* Immutable event to notify a change in a certain value.
* <p>

View file

@ -2,6 +2,8 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.entitySystem.event;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* A consumable event is an event that can be prevented from continuing through remaining event receivers. This is
* primarily useful for input event.

View file

@ -1,10 +0,0 @@
// Copyright 2021 The Terasology Foundation
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.entitySystem.event;
/**
* Marker interface for classes that can be sent to entities as events
*
*/
public interface Event {
}

View file

@ -5,6 +5,7 @@
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.entitysystem.event.Event;
public class PendingEvent {
private EntityRef entity;

View file

@ -0,0 +1,20 @@
// Copyright 2021 The Terasology Foundation
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.entitySystem.event;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Provide priority possible for events. use with {@link ReceiveEvent}
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Priority {
int value();
}

View file

@ -1,33 +0,0 @@
// Copyright 2021 The Terasology Foundation
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.entitySystem.event;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.gestalt.entitysystem.component.Component;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* This annotation is used to mark up methods that can be registered to receive events through the EventSystem
* <br><br>
* These methods should have the form
* <code>public void handlerMethod(EventType event, EntityRef entity)</code>
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ReceiveEvent {
/**
* What components that the entity must have for this method to be invoked
*/
Class<? extends Component>[] components() default {};
RegisterMode netFilter() default RegisterMode.ALWAYS;
int priority() default EventPriority.PRIORITY_NORMAL;
String activity() default "";
}

View file

@ -4,7 +4,7 @@
package org.terasology.engine.entitySystem.event.internal;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* Interface for a single event receiver

View file

@ -3,10 +3,10 @@
package org.terasology.engine.entitySystem.event.internal;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.entitySystem.systems.ComponentSystem;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* Event system propagates events to registered handlers
@ -28,7 +28,7 @@ public interface EventSystem {
void registerEvent(ResourceUrn uri, Class<? extends Event> eventType);
/**
* Registers an object as an event handler - all methods with the {@link org.terasology.engine.entitySystem.event.ReceiveEvent}
* Registers an object as an event handler - all methods with the {@link org.terasology.gestalt.entitysystem.event.ReceiveEvent}
* annotation will be registered
*
* @param handler

View file

@ -19,16 +19,20 @@
import org.slf4j.LoggerFactory;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.AbstractConsumableEvent;
import org.terasology.engine.entitySystem.event.Activity;
import org.terasology.engine.entitySystem.event.ConsumableEvent;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.entitySystem.event.EventPriority;
import org.terasology.engine.entitySystem.event.PendingEvent;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.event.Priority;
import org.terasology.engine.entitySystem.systems.ComponentSystem;
import org.terasology.engine.entitySystem.systems.NetFilterEvent;
import org.terasology.engine.monitoring.PerformanceMonitor;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import javax.annotation.Nullable;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Arrays;
@ -99,9 +103,26 @@ public void registerEventHandler(ComponentSystem handler) {
for (Method method : handlerClass.getMethods()) {
ReceiveEvent receiveEventAnnotation = method.getAnnotation(ReceiveEvent.class);
if (receiveEventAnnotation != null) {
if (!receiveEventAnnotation.netFilter().isValidFor(isAutority, false)) {
NetFilterEvent netFilterAnnotation = method.getAnnotation(NetFilterEvent.class);
if (netFilterAnnotation != null && !netFilterAnnotation.netFilter().isValidFor(isAutority, false)) {
continue;
}
int priority;
Priority priorityAnnotation = method.getAnnotation(Priority.class);
if (priorityAnnotation != null) {
priority = priorityAnnotation.value();
} else {
priority = EventPriority.PRIORITY_NORMAL;
}
String activity = null;
Activity activityAnnotation = method.getAnnotation(Activity.class);
if (activityAnnotation != null) {
activity = activityAnnotation.value();
}
Set<Class<? extends Component>> requiredComponents = Sets.newLinkedHashSet();
method.setAccessible(true);
Class<?>[] types = method.getParameterTypes();
@ -123,10 +144,9 @@ public void registerEventHandler(ComponentSystem handler) {
requiredComponents.add((Class<? extends Component>) types[i]);
componentParams.add((Class<? extends Component>) types[i]);
}
ByteCodeEventHandlerInfo handlerInfo = new ByteCodeEventHandlerInfo(handler, method,
receiveEventAnnotation.priority(),
receiveEventAnnotation.activity(), requiredComponents, componentParams);
priority,
activity, requiredComponents, componentParams);
addEventHandler((Class<? extends Event>) types[0], handlerInfo, requiredComponents);
}
}
@ -333,7 +353,7 @@ private static class ByteCodeEventHandlerInfo implements EventHandlerInfo {
ByteCodeEventHandlerInfo(ComponentSystem handler,
Method method,
int priority,
String activity,
@Nullable String activity,
Collection<Class<? extends Component>> filterComponents,
Collection<Class<? extends Component>> componentParams) {
@ -372,13 +392,13 @@ public void invoke(EntityRef entity, Event event) {
}
if (!activity.isEmpty()) {
if (activity != null) {
PerformanceMonitor.startActivity(activity);
}
try {
methodAccess.invoke(handler, methodIndex, params);
} finally {
if (!activity.isEmpty()) {
if (activity != null) {
PerformanceMonitor.endActivity();
}
}

View file

@ -5,7 +5,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.gestalt.module.ModuleEnvironment;
import org.terasology.reflection.copy.CopyStrategyLibrary;
import org.terasology.reflection.metadata.ClassMetadata;

View file

@ -5,15 +5,15 @@
import com.google.common.base.Predicates;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.reflection.metadata.ClassMetadata;
import org.terasology.reflection.copy.CopyStrategyLibrary;
import org.terasology.reflection.reflect.InaccessibleFieldException;
import org.terasology.reflection.reflect.ReflectFactory;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.network.BroadcastEvent;
import org.terasology.engine.network.OwnerEvent;
import org.terasology.engine.network.ServerEvent;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.reflection.copy.CopyStrategyLibrary;
import org.terasology.reflection.metadata.ClassMetadata;
import org.terasology.reflection.reflect.InaccessibleFieldException;
import org.terasology.reflection.reflect.ReflectFactory;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

View file

@ -3,7 +3,7 @@
package org.terasology.engine.entitySystem.sectors;
import org.joml.Vector3i;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.gestalt.module.sandbox.API;
import java.util.Set;

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.entitySystem.sectors;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* Event sent to sector-scope entities when the first of its watched chunks load.

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.entitySystem.sectors;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* Event sent to sector-scope entities when all of its watched chunks unload.

View file

@ -3,7 +3,7 @@
package org.terasology.engine.entitySystem.sectors;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.gestalt.module.sandbox.API;
/**

View file

@ -10,7 +10,6 @@
import org.terasology.engine.entitySystem.entity.lifecycleEvents.BeforeRemoveComponent;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnAddedComponent;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnChangedComponent;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.logic.delay.DelayManager;
@ -20,6 +19,7 @@
import org.terasology.engine.world.chunks.ChunkProvider;
import org.terasology.engine.world.chunks.event.BeforeChunkUnload;
import org.terasology.engine.world.chunks.event.OnChunkLoaded;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import java.util.stream.Collectors;

View file

@ -0,0 +1,20 @@
// Copyright 2021 The Terasology Foundation
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.entitySystem.systems;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Marks event handlers condition. when should be registered. {@link RegisterMode}
* Using with {@link org.terasology.gestalt.entitysystem.event.ReceiveEvent}
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface NetFilterEvent {
RegisterMode netFilter();
}

View file

@ -12,8 +12,8 @@
* In most cases it will be sufficient to:
* <ul>
* <li>
* use {@link org.terasology.engine.entitySystem.event.ReceiveEvent}
* to update the system on specific events ({@link org.terasology.engine.entitySystem.event.Event}),
* use {@link org.terasology.gestalt.entitysystem.event.ReceiveEvent}
* to update the system on specific events ({@link org.terasology.gestalt.entitysystem.event.Event}),
* </li>
* <li>
* use {@link DelayManager} to update entities or to call a

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.input.cameraTarget;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* Event when the camera ceases to be over an entity - sent to the involved entity

View file

@ -3,7 +3,7 @@
package org.terasology.engine.input.cameraTarget;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* This event is sent when the camera starts pointing at a target, to the target

View file

@ -4,7 +4,7 @@
package org.terasology.engine.input.cameraTarget;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
public class CameraTargetChangedEvent implements Event {
private EntityRef oldTarget;

View file

@ -6,16 +6,16 @@
import org.terasology.engine.audio.AudioManager;
import org.terasology.engine.audio.StaticSound;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.logic.players.LocalPlayer;
import org.terasology.engine.logic.characters.events.ActivationPredicted;
import org.terasology.engine.logic.common.ActivateEvent;
import org.terasology.engine.logic.players.LocalPlayer;
import org.terasology.engine.registry.In;
import org.terasology.engine.utilities.random.FastRandom;
import org.terasology.engine.utilities.random.Random;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
/**
* This systems handles the playing of sounds in response to events, on both server and client,

View file

@ -6,12 +6,12 @@
import org.joml.Vector3f;
import org.terasology.engine.entitySystem.entity.EntityManager;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.logic.common.ActivateEvent;
import org.terasology.engine.registry.In;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
@RegisterSystem(RegisterMode.AUTHORITY)
public class SpawnPrefabAction extends BaseComponentSystem {

View file

@ -4,7 +4,6 @@
import org.terasology.engine.core.Time;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
@ -16,6 +15,7 @@
import org.terasology.engine.network.events.ConnectedEvent;
import org.terasology.engine.network.events.DisconnectedEvent;
import org.terasology.engine.registry.In;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
@RegisterSystem(RegisterMode.AUTHORITY)
public class AfkAuthoritySystem extends BaseComponentSystem {

View file

@ -7,7 +7,7 @@
import org.terasology.engine.core.Time;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.EventPriority;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.event.Priority;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
@ -22,6 +22,7 @@
import org.terasology.engine.physics.events.MovedEvent;
import org.terasology.engine.registry.In;
import org.terasology.engine.rendering.nui.NUIManager;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import org.terasology.input.Keyboard;
@RegisterSystem(RegisterMode.CLIENT)
@ -125,7 +126,8 @@ public void onMove(MovedEvent movedEvent, EntityRef entity) {
}
}
@ReceiveEvent(priority = EventPriority.PRIORITY_HIGH)
@Priority(EventPriority.PRIORITY_HIGH)
@ReceiveEvent
public void onKeyDown(KeyDownEvent event, EntityRef entity) {
if (requireConnection()) {
return;

View file

@ -10,7 +10,6 @@
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnActivatedComponent;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnAddedComponent;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.prefab.PrefabManager;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
@ -25,6 +24,7 @@
import org.terasology.engine.registry.Share;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.assets.management.AssetManager;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import org.terasology.gestalt.naming.Name;
import java.io.FileOutputStream;

View file

@ -11,7 +11,6 @@
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnActivatedComponent;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnAddedComponent;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.prefab.PrefabManager;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
@ -26,6 +25,7 @@
import org.terasology.engine.registry.Share;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.assets.management.AssetManager;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import org.terasology.gestalt.naming.Name;
import java.io.FileOutputStream;

View file

@ -4,15 +4,15 @@
package org.terasology.engine.logic.behavior.nui;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.input.ButtonState;
import org.terasology.engine.logic.console.Console;
import org.terasology.engine.logic.console.CoreMessageType;
import org.terasology.engine.network.ClientComponent;
import org.terasology.engine.registry.In;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import org.terasology.input.ButtonState;
@RegisterSystem(RegisterMode.REMOTE_CLIENT)
public class BehaviorTreeClientSystem extends BaseComponentSystem {

View file

@ -3,14 +3,14 @@
package org.terasology.engine.logic.behavior.nui;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.input.ButtonState;
import org.terasology.engine.network.ClientComponent;
import org.terasology.engine.registry.In;
import org.terasology.engine.rendering.nui.NUIManager;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import org.terasology.input.ButtonState;
/**
* Opens the bt editor screen.

View file

@ -3,11 +3,11 @@
package org.terasology.engine.logic.characters;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.logic.characters.events.ChangeHeldItemRequest;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
@RegisterSystem(RegisterMode.AUTHORITY)
public class CharacterHeldItemAuthoritySystem extends BaseComponentSystem {

View file

@ -3,7 +3,7 @@
package org.terasology.engine.logic.characters;
import org.joml.Vector3f;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
public class CharacterImpulseEvent implements Event {
Vector3f direction;

View file

@ -4,13 +4,14 @@
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.EventPriority;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.event.Priority;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.logic.characters.events.OnScaleEvent;
import org.terasology.engine.logic.characters.events.ScaleByRequest;
import org.terasology.engine.logic.characters.events.ScaleToRequest;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
/**
* Authority system to finally "accept" scaling requests.
@ -26,14 +27,16 @@
@RegisterSystem(RegisterMode.AUTHORITY)
public class CharacterScalingSystem extends BaseComponentSystem {
@ReceiveEvent(priority = EventPriority.PRIORITY_TRIVIAL)
@Priority(EventPriority.PRIORITY_TRIVIAL)
@ReceiveEvent
public void onScaleByRequest(ScaleByRequest request, EntityRef entity, CharacterMovementComponent movementComponent) {
OnScaleEvent scaleEvent = new OnScaleEvent(movementComponent.height, movementComponent.height * request.getFactor());
entity.send(scaleEvent);
request.consume();
}
@ReceiveEvent(priority = EventPriority.PRIORITY_TRIVIAL)
@Priority(EventPriority.PRIORITY_TRIVIAL)
@ReceiveEvent
public void onScaleToRequest(ScaleToRequest request, EntityRef entity, CharacterMovementComponent movementComponent) {
OnScaleEvent scaleEvent = new OnScaleEvent(movementComponent.height, request.getTargetValue());
entity.send(scaleEvent);

View file

@ -11,7 +11,6 @@
import org.terasology.engine.audio.events.PlaySoundEvent;
import org.terasology.engine.core.Time;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
@ -29,6 +28,7 @@
import org.terasology.engine.utilities.random.Random;
import org.terasology.engine.world.WorldProvider;
import org.terasology.engine.world.block.Block;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import java.util.List;

View file

@ -11,9 +11,10 @@
import org.terasology.engine.entitySystem.entity.EntityManager;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.EventPriority;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.event.Priority;
import org.terasology.engine.entitySystem.prefab.Prefab;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.NetFilterEvent;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.entitySystem.systems.UpdateSubscriberSystem;
@ -49,6 +50,7 @@
import org.terasology.engine.registry.In;
import org.terasology.engine.world.block.BlockComponent;
import org.terasology.engine.world.block.regions.ActAsBlockComponent;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import java.util.Optional;
@ -168,7 +170,8 @@ public String getDamageTypeName(Prefab damageType) {
}
}
@ReceiveEvent(components = CharacterComponent.class, netFilter = RegisterMode.CLIENT)
@NetFilterEvent(netFilter = RegisterMode.CLIENT)
@ReceiveEvent(components = CharacterComponent.class)
public void onAttackRequest(AttackButton event, EntityRef entity, CharacterHeldItemComponent characterHeldItemComponent) {
if (!event.isDown()) {
return;
@ -191,7 +194,8 @@ public void onAttackRequest(AttackButton event, EntityRef entity, CharacterHeldI
}
}
@ReceiveEvent(components = LocationComponent.class, netFilter = RegisterMode.AUTHORITY)
@NetFilterEvent(netFilter = RegisterMode.AUTHORITY)
@ReceiveEvent(components = LocationComponent.class)
public void onAttackRequest(AttackRequest event, EntityRef character, CharacterComponent characterComponent) {
// if an item is used, make sure this entity is allowed to attack with it
if (event.getItem().exists()) {
@ -254,17 +258,22 @@ public void onItemUse(OnItemUseEvent event, EntityRef entity, CharacterHeldItemC
entity.saveComponent(characterHeldItemComponent);
}
@ReceiveEvent(priority = EventPriority.PRIORITY_TRIVIAL, netFilter = RegisterMode.AUTHORITY)
@NetFilterEvent(netFilter = RegisterMode.AUTHORITY)
@Priority(EventPriority.PRIORITY_TRIVIAL)
@ReceiveEvent
public void onAttackBlock(AttackEvent event, EntityRef entityRef, BlockComponent blockComponent) {
entityRef.send(new DestroyEvent(event.getInstigator(), event.getDirectCause(), EngineDamageTypes.PHYSICAL.get()));
}
@ReceiveEvent(priority = EventPriority.PRIORITY_TRIVIAL, netFilter = RegisterMode.AUTHORITY)
@NetFilterEvent(netFilter = RegisterMode.AUTHORITY)
@Priority(EventPriority.PRIORITY_TRIVIAL)
@ReceiveEvent
public void onAttackBlock(AttackEvent event, EntityRef entityRef, ActAsBlockComponent actAsBlockComponent) {
entityRef.send(new DestroyEvent(event.getInstigator(), event.getDirectCause(), EngineDamageTypes.PHYSICAL.get()));
}
@ReceiveEvent(components = {CharacterComponent.class, LocationComponent.class}, netFilter = RegisterMode.AUTHORITY)
@NetFilterEvent(netFilter = RegisterMode.AUTHORITY)
@ReceiveEvent(components = {CharacterComponent.class, LocationComponent.class})
public void onActivationRequest(ActivationRequest event, EntityRef character) {
if (isPredictionOfEventCorrect(character, event)) {
OnItemUseEvent onItemUseEvent = new OnItemUseEvent();

View file

@ -3,7 +3,7 @@
package org.terasology.engine.logic.characters;
import org.joml.Vector3fc;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* Used within the server to trigger a teleport of a character. Just chaining the position is not possible due to

View file

@ -13,7 +13,6 @@
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.BeforeDeactivateComponent;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnActivatedComponent;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
@ -25,6 +24,7 @@
import org.terasology.engine.registry.In;
import org.terasology.engine.utilities.collection.CircularBuffer;
import org.terasology.engine.world.WorldProvider;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import java.util.Deque;
import java.util.Iterator;

View file

@ -11,7 +11,7 @@
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnActivatedComponent;
import org.terasology.engine.entitySystem.event.EventPriority;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.event.Priority;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
@ -19,6 +19,7 @@
import org.terasology.engine.logic.location.Location;
import org.terasology.engine.logic.location.LocationComponent;
import org.terasology.engine.registry.In;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
/**
* Gaze describes where the character is looking.
@ -51,7 +52,8 @@ private EntityRef createGazeEntity() {
return gazeEntity;
}
@ReceiveEvent(priority = EventPriority.PRIORITY_LOW)
@Priority(EventPriority.PRIORITY_LOW)
@ReceiveEvent
public void onScaleCharacter(OnScaleEvent event, EntityRef entity, GazeMountPointComponent gazeMountPoint) {
// adjust character eye level
// set eye level based on "average" body decomposition for human-like figures into 7.5 "heads".

View file

@ -14,7 +14,6 @@
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.BeforeDeactivateComponent;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnActivatedComponent;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
@ -32,6 +31,7 @@
import org.terasology.engine.registry.Share;
import org.terasology.engine.utilities.collection.CircularBuffer;
import org.terasology.engine.world.WorldProvider;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import java.util.List;
import java.util.Map;

View file

@ -11,7 +11,7 @@
import org.terasology.engine.entitySystem.entity.lifecycleEvents.BeforeDeactivateComponent;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnActivatedComponent;
import org.terasology.engine.entitySystem.event.EventPriority;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.event.Priority;
import org.terasology.engine.entitySystem.prefab.Prefab;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
@ -22,6 +22,7 @@
import org.terasology.engine.logic.players.LocalPlayer;
import org.terasology.engine.registry.In;
import org.terasology.gestalt.assets.management.AssetManager;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
/**
* This system is responsible for sending a {@link CreateVisualCharacterEvent} according to how it is specified in
@ -104,7 +105,8 @@ public void onAwaitedLocalCharacterSpawnEvent(AwaitedLocalCharacterSpawnEvent ev
}
@ReceiveEvent(priority = EventPriority.PRIORITY_TRIVIAL)
@Priority(EventPriority.PRIORITY_TRIVIAL)
@ReceiveEvent
public void onCreateDefaultVisualCharacter(CreateVisualCharacterEvent event, EntityRef characterEntity) {
Prefab prefab = assetManager.getAsset("engine:defaultVisualCharacter", Prefab.class).get();
EntityBuilder entityBuilder = event.getVisualCharacterBuilder();

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.logic.characters.events;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* This event is attached to the character.

View file

@ -3,8 +3,8 @@
package org.terasology.engine.logic.characters.events;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.network.ServerEvent;
import org.terasology.gestalt.entitysystem.event.Event;
@ServerEvent
public class ChangeHeldItemRequest implements Event {

View file

@ -3,7 +3,7 @@
package org.terasology.engine.logic.characters.events;
import org.joml.Vector3f;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
public class CollisionEvent implements Event {
private Vector3f velocity;

View file

@ -3,8 +3,8 @@
package org.terasology.engine.logic.characters.events;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.network.OwnerEvent;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* This event is sent to the client entity when the character dies.

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.logic.characters.events;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
public class FootstepEvent implements Event {

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.logic.characters.events;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
public class JumpEvent implements Event {
}

View file

@ -3,8 +3,8 @@
package org.terasology.engine.logic.characters.events;
import org.joml.Vector3i;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.world.block.Block;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* This event gets sent to the player entity when it enters a new block.

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.logic.characters.events;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* Immutable event to notify that a character entity is scaled.

View file

@ -3,8 +3,8 @@
package org.terasology.engine.logic.characters.events;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.network.OwnerEvent;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* This event is sent to the player entity when the player dies.

View file

@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.logic.characters.events;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.logic.characters.MovementMode;
import org.terasology.gestalt.entitysystem.event.Event;
public class SetMovementModeEvent implements Event {
private MovementMode mode;

View file

@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.logic.characters.events;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.world.block.Block;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* This event is sent when a character moves far enough to trigger a swim stroke (similar to a footstep on land)

View file

@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.logic.characters.interactions;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.network.OwnerEvent;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* Represents the end of an interaction between for example a character and a container.

View file

@ -3,7 +3,7 @@
package org.terasology.engine.logic.characters.interactions;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.gestalt.module.sandbox.API;
/**

View file

@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.logic.characters.interactions;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.network.ServerEvent;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* Request the server to cancel the current interaction.

View file

@ -3,7 +3,7 @@
package org.terasology.engine.logic.characters.interactions;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.gestalt.module.sandbox.API;
/**

View file

@ -4,20 +4,21 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.NetFilterEvent;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.logic.characters.CharacterComponent;
import org.terasology.engine.logic.common.ActivateEvent;
import org.terasology.engine.logic.characters.events.ActivationPredicted;
import org.terasology.engine.logic.characters.events.ActivationRequestDenied;
import org.terasology.engine.logic.common.ActivateEvent;
import org.terasology.engine.network.ClientComponent;
import org.terasology.engine.registry.In;
import org.terasology.engine.rendering.nui.NUIManager;
import org.terasology.engine.rendering.nui.ScreenLayerClosedEvent;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
@RegisterSystem(RegisterMode.ALWAYS)
public class InteractionSystem extends BaseComponentSystem {
@ -26,7 +27,8 @@ public class InteractionSystem extends BaseComponentSystem {
@In
private NUIManager nuiManager;
@ReceiveEvent(components = InteractionTargetComponent.class, netFilter = RegisterMode.AUTHORITY)
@NetFilterEvent(netFilter = RegisterMode.AUTHORITY)
@ReceiveEvent(components = InteractionTargetComponent.class)
public void onActivate(ActivateEvent event, EntityRef target) {
EntityRef instigator = event.getInstigator();
@ -64,12 +66,14 @@ public void onActivationPredicted(ActivationPredicted event, EntityRef target) {
}
}
@ReceiveEvent(components = CharacterComponent.class, netFilter = RegisterMode.AUTHORITY)
@NetFilterEvent(netFilter = RegisterMode.AUTHORITY)
@ReceiveEvent(components = CharacterComponent.class)
public void onActivationRequestDenied(ActivationRequestDenied event, EntityRef character) {
character.send(new InteractionEndEvent(event.getActivationId()));
}
@ReceiveEvent(netFilter = RegisterMode.AUTHORITY)
@NetFilterEvent(netFilter = RegisterMode.AUTHORITY)
@ReceiveEvent
public void onInteractionEndRequest(InteractionEndRequest request, EntityRef instigator) {
InteractionUtil.cancelInteractionAsServer(instigator);
}

View file

@ -7,7 +7,6 @@
import org.slf4j.LoggerFactory;
import org.terasology.engine.entitySystem.entity.EntityManager;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.input.binds.general.ChatButton;
@ -26,6 +25,7 @@
import org.terasology.engine.registry.In;
import org.terasology.engine.rendering.nui.NUIManager;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import org.terasology.input.ButtonState;
import org.terasology.nui.FontColor;

View file

@ -7,12 +7,12 @@
import org.terasology.engine.entitySystem.entity.EntityManager;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnAddedComponent;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.entitySystem.systems.UpdateSubscriberSystem;
import org.terasology.engine.registry.In;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
@RegisterSystem(RegisterMode.AUTHORITY)
public class LifespanSystem extends BaseComponentSystem implements UpdateSubscriberSystem {

View file

@ -2,9 +2,9 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.logic.console;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.naming.Name;
import org.terasology.engine.network.ServerEvent;
import org.terasology.gestalt.entitysystem.event.Event;
import org.terasology.gestalt.naming.Name;
import java.util.List;

View file

@ -4,8 +4,9 @@
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.EventPriority;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.event.Priority;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.NetFilterEvent;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.input.binds.general.ConsoleButton;
@ -14,6 +15,7 @@
import org.terasology.engine.network.ClientComponent;
import org.terasology.engine.registry.In;
import org.terasology.engine.rendering.nui.NUIManager;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import org.terasology.input.ButtonState;
@RegisterSystem
@ -43,7 +45,8 @@ public void initialise() {
}
}
@ReceiveEvent(components = ClientComponent.class, priority = EventPriority.PRIORITY_CRITICAL)
@Priority(EventPriority.PRIORITY_CRITICAL)
@ReceiveEvent(components = ClientComponent.class)
public void onToggleConsole(ConsoleButton event, EntityRef entity) {
if (event.getState() == ButtonState.UP) {
nuiManager.toggleScreen("engine:console");
@ -60,7 +63,8 @@ public void onMessage(MessageEvent event, EntityRef entity) {
}
}
@ReceiveEvent(components = ClientComponent.class, netFilter = RegisterMode.AUTHORITY)
@NetFilterEvent(netFilter = RegisterMode.AUTHORITY)
@ReceiveEvent(components = ClientComponent.class)
public void onCommand(CommandEvent event, EntityRef entity) {
ConsoleCommand cmd = console.getCommand(event.getCommandName());

View file

@ -3,7 +3,7 @@
package org.terasology.engine.logic.console;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
@FunctionalInterface
public interface MessageEvent extends Event {

View file

@ -7,12 +7,12 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.world.WorldComponent;
import org.terasology.engine.world.chunks.event.BeforeChunkUnload;
import org.terasology.engine.world.chunks.event.OnChunkLoaded;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import java.util.Set;

View file

@ -11,13 +11,13 @@
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.BeforeDeactivateComponent;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnActivatedComponent;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.entitySystem.systems.UpdateSubscriberSystem;
import org.terasology.engine.registry.In;
import org.terasology.engine.registry.Share;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import java.util.Iterator;
import java.util.LinkedList;

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.logic.delay;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
public class DelayedActionTriggeredEvent implements Event {
private String actionId;

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.engine.logic.delay;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
public class PeriodicActionTriggeredEvent implements Event {
private String actionId;

View file

@ -3,8 +3,8 @@
package org.terasology.engine.logic.health;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.entitySystem.prefab.Prefab;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* Sent to request the destruction of an entity.

View file

@ -3,8 +3,8 @@
package org.terasology.engine.logic.health;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.entitySystem.prefab.Prefab;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* Sent when the entity is destroyed.

View file

@ -3,13 +3,13 @@
package org.terasology.engine.logic.health;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.logic.characters.CharacterComponent;
import org.terasology.engine.telemetry.GamePlayStatsComponent;
import org.terasology.engine.world.block.BlockComponent;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import java.util.Map;

View file

@ -7,7 +7,6 @@
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnActivatedComponent;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnChangedComponent;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.rendering.iconmesh.IconMeshFactory;
@ -18,6 +17,7 @@
import org.terasology.engine.utilities.random.Random;
import org.terasology.engine.world.block.family.BlockFamily;
import org.terasology.engine.world.block.items.BlockItemComponent;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
/**
* This system adds meshes to items that have RenderItemBlockMeshComponent or RenderItemIconMeshComponent

View file

@ -10,7 +10,6 @@
import org.terasology.engine.core.Time;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnAddedComponent;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.metadata.EntitySystemLibrary;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
@ -25,6 +24,7 @@
import org.terasology.engine.world.block.family.BlockFamily;
import org.terasology.engine.world.block.items.BlockItemComponent;
import org.terasology.gestalt.entitysystem.component.Component;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
/**
* This system uses the pickup prefab on an item component to add on extra components needed for the item to display in the world.

View file

@ -4,8 +4,8 @@
import org.joml.Vector3f;
import org.joml.Vector3fc;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.network.ServerEvent;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* Fire this event on an item in order for the authority to add the necessary components to put it in the world.

View file

@ -3,8 +3,8 @@
package org.terasology.engine.logic.inventory.events;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.network.ServerEvent;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* Gives the entity to the target entity

View file

@ -8,10 +8,11 @@
import org.joml.Vector3fc;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.BeforeRemoveComponent;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.NetFilterEvent;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import java.util.Iterator;
@ -117,7 +118,8 @@ public void onDestroyed(BeforeRemoveComponent event, EntityRef entity, LocationC
}
}
@ReceiveEvent(netFilter = RegisterMode.REMOTE_CLIENT)
@NetFilterEvent(netFilter = RegisterMode.REMOTE_CLIENT)
@ReceiveEvent
public void onResyncLocation(LocationResynchEvent event, EntityRef entityRef, LocationComponent locationComponent) {
locationComponent.setWorldPosition(event.getPosition());
locationComponent.setWorldRotation(event.getRotation());

View file

@ -7,7 +7,7 @@
import org.joml.Quaternionfc;
import org.joml.Vector3f;
import org.joml.Vector3fc;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.gestalt.entitysystem.event.Event;
/**
* A <i>notification event</i> that the location and/or rotation of the associated entity has changed.

View file

@ -6,11 +6,11 @@
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnAddedComponent;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnChangedComponent;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.entitySystem.systems.UpdateSubscriberSystem;
import org.terasology.gestalt.entitysystem.event.ReceiveEvent;
import java.util.Set;

View file

@ -4,8 +4,8 @@
import org.joml.Quaternionf;
import org.joml.Vector3f;
import org.terasology.engine.entitySystem.event.Event;
import org.terasology.engine.network.BroadcastEvent;
import org.terasology.gestalt.entitysystem.event.Event;
@BroadcastEvent
public class LocationResynchEvent implements Event {

Some files were not shown because too many files have changed in this diff Show more