Reflections change & Start HTTP before game server

This commit is contained in:
KingRainbow44
2023-08-31 20:59:38 -04:00
parent 58b3570f27
commit 9295d79bc2
17 changed files with 148 additions and 379 deletions

View File

@@ -20,10 +20,10 @@ import emu.grasscutter.net.proto.AbilityScalarValueEntryOuterClass.AbilityScalar
import emu.grasscutter.net.proto.ModifierActionOuterClass.ModifierAction;
import emu.grasscutter.server.event.player.PlayerUseSkillEvent;
import io.netty.util.concurrent.FastThreadLocalThread;
import lombok.Getter;
import java.util.HashMap;
import java.util.concurrent.*;
import lombok.Getter;
import org.reflections.Reflections;
public final class AbilityManager extends BasePlayerManager {
private static final HashMap<AbilityModifierAction.Type, AbilityActionHandler> actionHandlers =
@@ -54,8 +54,8 @@ public final class AbilityManager extends BasePlayerManager {
}
public static void registerHandlers() {
Reflections reflections = new Reflections("emu.grasscutter.game.ability.actions");
var handlerClassesAction = reflections.getSubTypesOf(AbilityActionHandler.class);
var handlerClassesAction = Grasscutter.reflector
.getSubTypesOf(AbilityActionHandler.class);
for (var obj : handlerClassesAction) {
try {
@@ -70,9 +70,8 @@ public final class AbilityManager extends BasePlayerManager {
}
}
reflections = new Reflections("emu.grasscutter.game.ability.mixins");
var handlerClassesMixin = reflections.getSubTypesOf(AbilityMixinHandler.class);
var handlerClassesMixin = Grasscutter.reflector
.getSubTypesOf(AbilityMixinHandler.class);
for (var obj : handlerClassesMixin) {
try {
if (obj.isAnnotationPresent(AbilityAction.class)) {
@@ -413,11 +412,9 @@ public final class AbilityManager extends BasePlayerManager {
if (instancedAbilityData == null) {
// search on entity base id
if (entity != null) {
if ((head.getInstancedAbilityId() - 1) < entity.getInstancedAbilities().size()) {
instancedAbility = entity.getInstancedAbilities().get(head.getInstancedAbilityId() - 1);
if (instancedAbility != null) instancedAbilityData = instancedAbility.getData();
}
if ((head.getInstancedAbilityId() - 1) < entity.getInstancedAbilities().size()) {
instancedAbility = entity.getInstancedAbilities().get(head.getInstancedAbilityId() - 1);
if (instancedAbility != null) instancedAbilityData = instancedAbility.getData();
}
}
@@ -581,6 +578,6 @@ public final class AbilityManager extends BasePlayerManager {
public void addAbilityToEntity(GameEntity entity, AbilityData abilityData) {
var ability = new Ability(abilityData, entity, this.player);
entity.getInstancedAbilities().add(ability); // This are in order
entity.getInstancedAbilities().add(ability); // This is in order
}
}

View File

@@ -8,11 +8,12 @@ import emu.grasscutter.game.player.*;
import emu.grasscutter.game.props.*;
import emu.grasscutter.net.proto.ActivityInfoOuterClass;
import emu.grasscutter.server.packet.send.PacketActivityScheduleInfoNotify;
import lombok.Getter;
import java.util.*;
import java.util.concurrent.*;
import lombok.Getter;
import org.reflections.Reflections;
@SuppressWarnings("unchecked")
@Getter
public class ActivityManager extends BasePlayerManager {
private static final Map<Integer, ActivityConfigItem> activityConfigItemMap;
@@ -29,16 +30,14 @@ public class ActivityManager extends BasePlayerManager {
// scan activity type handler & watcher type
var activityHandlerTypeMap = new HashMap<ActivityType, ConstructorAccess<?>>();
var activityWatcherTypeMap = new HashMap<WatcherTriggerType, ConstructorAccess<?>>();
var reflections = new Reflections(ActivityManager.class.getPackage().getName());
reflections
Grasscutter.reflector
.getSubTypesOf(ActivityHandler.class)
.forEach(
item -> {
var typeName = item.getAnnotation(GameActivity.class);
activityHandlerTypeMap.put(typeName.value(), ConstructorAccess.get(item));
});
reflections
Grasscutter.reflector
.getSubTypesOf(ActivityWatcher.class)
.forEach(
item -> {

View File

@@ -1,49 +1,41 @@
package emu.grasscutter.game.dungeons;
import emu.grasscutter.GameConstants;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.*;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.binout.ScenePointEntry;
import emu.grasscutter.data.excels.dungeon.DungeonData;
import emu.grasscutter.data.excels.dungeon.DungeonPassConfigData;
import emu.grasscutter.data.excels.dungeon.*;
import emu.grasscutter.game.dungeons.handlers.DungeonBaseHandler;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.SceneType;
import emu.grasscutter.game.world.Position;
import emu.grasscutter.game.world.Scene;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer;
import emu.grasscutter.game.world.*;
import emu.grasscutter.net.packet.*;
import emu.grasscutter.server.game.*;
import emu.grasscutter.server.packet.send.PacketDungeonEntryInfoRsp;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import java.util.List;
import it.unimi.dsi.fastutil.ints.*;
import lombok.val;
import org.reflections.Reflections;
public class DungeonSystem extends BaseGameSystem {
import java.util.List;
public final class DungeonSystem extends BaseGameSystem {
private static final BasicDungeonSettleListener basicDungeonSettleObserver =
new BasicDungeonSettleListener();
private final Int2ObjectMap<DungeonBaseHandler> passCondHandlers;
public DungeonSystem(GameServer server) {
super(server);
this.passCondHandlers = new Int2ObjectOpenHashMap<>();
registerHandlers();
this.registerHandlers();
}
public void registerHandlers() {
this.registerHandlers(
this.passCondHandlers,
"emu.grasscutter.game.dungeons.pass_condition",
DungeonBaseHandler.class);
}
public <T> void registerHandlers(Int2ObjectMap<T> map, String packageName, Class<T> clazz) {
Reflections reflections = new Reflections(packageName);
var handlerClasses = reflections.getSubTypesOf(clazz);
public <T> void registerHandlers(Int2ObjectMap<T> map, Class<T> clazz) {
var handlerClasses = Grasscutter.reflector.getSubTypesOf(clazz);
for (var obj : handlerClasses) {
this.registerHandler(map, obj);
}

View File

@@ -1,7 +1,5 @@
package emu.grasscutter.game.gacha;
import static emu.grasscutter.config.Configuration.GAME_OPTIONS;
import com.sun.nio.file.SensitivityWatchEventModifier;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.*;
@@ -23,10 +21,13 @@ import emu.grasscutter.server.game.*;
import emu.grasscutter.server.packet.send.PacketDoGachaRsp;
import emu.grasscutter.utils.*;
import it.unimi.dsi.fastutil.ints.*;
import org.greenrobot.eventbus.Subscribe;
import java.nio.file.*;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
import org.greenrobot.eventbus.Subscribe;
import static emu.grasscutter.config.Configuration.GAME_OPTIONS;
public class GachaSystem extends BaseGameSystem {
private static final int starglitterId = 221;
@@ -58,9 +59,9 @@ public class GachaSystem extends BaseGameSystem {
int autoScheduleId = 1000;
int autoSortId = 9000;
try {
List<GachaBanner> banners = DataLoader.loadTableToList("Banners", GachaBanner.class);
if (banners.size() > 0) {
for (GachaBanner banner : banners) {
var banners = DataLoader.loadTableToList("Banners", GachaBanner.class);
if (!banners.isEmpty()) {
for (var banner : banners) {
banner.onLoad();
if (banner.isDeprecated()) {
Grasscutter.getLogger()

View File

@@ -2,21 +2,15 @@ package emu.grasscutter.game.quest;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.excels.quest.QuestData;
import emu.grasscutter.data.excels.quest.QuestData.QuestAcceptCondition;
import emu.grasscutter.data.excels.quest.QuestData.QuestContentCondition;
import emu.grasscutter.data.excels.quest.QuestData.QuestExecParam;
import emu.grasscutter.data.excels.quest.QuestData.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.quest.conditions.BaseCondition;
import emu.grasscutter.game.quest.content.BaseContent;
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import org.reflections.Reflections;
import emu.grasscutter.server.game.*;
import it.unimi.dsi.fastutil.ints.*;
@SuppressWarnings("unchecked")
public class QuestSystem extends BaseGameSystem {
public final class QuestSystem extends BaseGameSystem {
private final Int2ObjectMap<BaseCondition> condHandlers;
private final Int2ObjectMap<BaseContent> contHandlers;
private final Int2ObjectMap<QuestExecHandler> execHandlers;
@@ -33,17 +27,15 @@ public class QuestSystem extends BaseGameSystem {
public void registerHandlers() {
this.registerHandlers(
this.condHandlers, "emu.grasscutter.game.quest.conditions", BaseCondition.class);
this.condHandlers, BaseCondition.class);
this.registerHandlers(
this.contHandlers, "emu.grasscutter.game.quest.content", BaseContent.class);
this.contHandlers, BaseContent.class);
this.registerHandlers(
this.execHandlers, "emu.grasscutter.game.quest.exec", QuestExecHandler.class);
this.execHandlers, QuestExecHandler.class);
}
public <T> void registerHandlers(Int2ObjectMap<T> map, String packageName, Class<T> clazz) {
Reflections reflections = new Reflections(packageName);
var handlerClasses = reflections.getSubTypesOf(clazz);
public <T> void registerHandlers(Int2ObjectMap<T> map, Class<T> clazz) {
var handlerClasses = Grasscutter.reflector.getSubTypesOf(clazz);
for (var obj : handlerClasses) {
this.registerHandler(map, obj);
}
@@ -51,8 +43,7 @@ public class QuestSystem extends BaseGameSystem {
public <T> void registerHandler(Int2ObjectMap<T> map, Class<? extends T> handlerClass) {
try {
int value = 0;
if (handlerClass.isAnnotationPresent(QuestValueExec.class)) {
int value; if (handlerClass.isAnnotationPresent(QuestValueExec.class)) {
QuestValueExec opcode = handlerClass.getAnnotation(QuestValueExec.class);
value = opcode.value().getValue();
} else if (handlerClass.isAnnotationPresent(QuestValueContent.class)) {
@@ -71,7 +62,7 @@ public class QuestSystem extends BaseGameSystem {
map.put(value, handlerClass.getDeclaredConstructor().newInstance());
} catch (Exception e) {
e.printStackTrace();
Grasscutter.getLogger().warn("Unable to register handler {}.", handlerClass.getSimpleName(), e);
}
}

View File

@@ -4,11 +4,8 @@ import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.excels.TalkConfigData;
import emu.grasscutter.data.excels.TalkConfigData.TalkExecParam;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.game.BaseGameSystem;
import emu.grasscutter.server.game.GameServer;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import org.reflections.Reflections;
import emu.grasscutter.server.game.*;
import it.unimi.dsi.fastutil.ints.*;
public final class TalkSystem extends BaseGameSystem {
private final Int2ObjectMap<TalkExecHandler> execHandlers = new Int2ObjectOpenHashMap<>();
@@ -16,21 +13,17 @@ public final class TalkSystem extends BaseGameSystem {
public TalkSystem(GameServer server) {
super(server);
this.registerHandlers(
this.execHandlers, "emu.grasscutter.game.talk.exec", TalkExecHandler.class);
this.registerHandlers(this.execHandlers, TalkExecHandler.class);
}
/**
* Registers all handlers with the required conditions.
*
* @param map The map to save handlers to.
* @param packageName The full package domain.
* @param clazz The class which handlers should derive from.
*/
public <T> void registerHandlers(Int2ObjectMap<T> map, String packageName, Class<T> clazz) {
var reflections = new Reflections(packageName);
var handlerClasses = reflections.getSubTypesOf(clazz);
public <T> void registerHandlers(Int2ObjectMap<T> map, Class<T> clazz) {
var handlerClasses = Grasscutter.reflector.getSubTypesOf(clazz);
for (var obj : handlerClasses) {
this.registerTalkHandler(map, obj);
}