diff --git a/src/yugecin/opsudance/core/inject/Binder.java b/src/yugecin/opsudance/core/inject/Binder.java
deleted file mode 100644
index 16f33180..00000000
--- a/src/yugecin/opsudance/core/inject/Binder.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * opsu!dance - fork of opsu! with cursordance auto
- * Copyright (C) 2017 yugecin
- *
- * opsu!dance is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * opsu!dance is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with opsu!dance. If not, see .
- */
-package yugecin.opsudance.core.inject;
-
-public interface Binder {
-
- void asEagerSingleton();
- void asLazySingleton();
- void to(Class extends T> type);
-}
diff --git a/src/yugecin/opsudance/core/inject/Inject.java b/src/yugecin/opsudance/core/inject/Inject.java
deleted file mode 100644
index 04fc897a..00000000
--- a/src/yugecin/opsudance/core/inject/Inject.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * opsu!dance - fork of opsu! with cursordance auto
- * Copyright (C) 2017 yugecin
- *
- * opsu!dance is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * opsu!dance is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with opsu!dance. If not, see .
- */
-package yugecin.opsudance.core.inject;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-@Retention(RetentionPolicy.RUNTIME) public @interface Inject {
-}
diff --git a/src/yugecin/opsudance/core/inject/Injector.java b/src/yugecin/opsudance/core/inject/Injector.java
deleted file mode 100644
index 9ddee01d..00000000
--- a/src/yugecin/opsudance/core/inject/Injector.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * opsu!dance - fork of opsu! with cursordance auto
- * Copyright (C) 2017 yugecin
- *
- * opsu!dance is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * opsu!dance is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with opsu!dance. If not, see .
- */
-package yugecin.opsudance.core.inject;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-@SuppressWarnings("unchecked")
-public abstract class Injector implements InstanceContainer, Binder {
-
- private final HashMap, Object> instances;
- private final LinkedList> lazyInstances;
-
- private Class> lastType;
-
- public Injector() {
- instances = new HashMap<>();
- lazyInstances = new LinkedList<>();
- instances.put(InstanceContainer.class, this);
- configure();
- }
-
- protected abstract void configure();
-
- public final T provide(Class type) {
- Object instance = instances.get(type);
- if (instance != null) {
- return (T) instance;
- }
- ListIterator> iter = lazyInstances.listIterator();
- while (iter.hasNext()) {
- Class> l = iter.next();
- if (l == type) {
- iter.remove();
- instance = createInstance(type);
- instances.put(type, instance);
- return (T) instance;
- }
- }
- return createInstance(type);
- }
-
- private T createInstance(Class type) {
- Constructor>[] constructors = type.getDeclaredConstructors();
- if (constructors.length == 0) {
- throw new RuntimeException("Cannot provide " + type.getSimpleName());
- }
- Constructor constructor = constructors[0];
- Class>[] parameterTypes = constructor.getParameterTypes();
- Object[] params = new Object[parameterTypes.length];
- for (int i = parameterTypes.length - 1; i >= 0; i--) {
- params[i] = provide(parameterTypes[i]);
- }
- try {
- return injectFields((T) constructor.newInstance(params), type);
- } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
- throw new RuntimeException(e);
- }
- }
-
- private T injectFields(T object, Class> type) {
- do {
- for (Field f : type.getDeclaredFields()) {
- if (f.getDeclaredAnnotation(Inject.class) == null) {
- continue;
- }
- boolean accessible = f.isAccessible();
- if (!accessible) {
- f.setAccessible(true);
- }
- try {
- f.set(object, provide(f.getType()));
- } catch (IllegalAccessException e) {
- throw new RuntimeException(e);
- }
- if (!accessible) {
- f.setAccessible(false);
- }
- }
- type = type.getSuperclass();
- } while (type != null);
- return object;
- }
-
- @Override
- public T injectFields(T obj) {
- return injectFields(obj, obj.getClass());
- }
-
- public final Binder bind(Class type) {
- lastType = type;
- return this;
- }
-
- @Override
- public final void asEagerSingleton() {
- instances.put(lastType, createInstance(lastType));
- }
-
- @Override
- public final void asLazySingleton() {
- lazyInstances.add(lastType);
- }
-
- @Override
- public final void to(Class type) {
- instances.put(lastType, createInstance(type));
- }
-
-}
diff --git a/src/yugecin/opsudance/core/inject/InstanceContainer.java b/src/yugecin/opsudance/core/inject/InstanceContainer.java
deleted file mode 100644
index 77ba1be7..00000000
--- a/src/yugecin/opsudance/core/inject/InstanceContainer.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * opsu!dance - fork of opsu! with cursordance auto
- * Copyright (C) 2017 yugecin
- *
- * opsu!dance is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * opsu!dance is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with opsu!dance. If not, see .
- */
-package yugecin.opsudance.core.inject;
-
-public interface InstanceContainer {
-
- T provide(Class type);
- T injectFields(T instance);
-
-}
diff --git a/src/yugecin/opsudance/core/inject/OpsuDanceInjector.java b/src/yugecin/opsudance/core/inject/OpsuDanceInjector.java
deleted file mode 100644
index ba100f31..00000000
--- a/src/yugecin/opsudance/core/inject/OpsuDanceInjector.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * opsu!dance - fork of opsu! with cursordance auto
- * Copyright (C) 2017 yugecin
- *
- * opsu!dance is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * opsu!dance is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- *
- * along with opsu!dance. If not, see .
- */
-package yugecin.opsudance.core.inject;
-
-import itdelatrisu.opsu.beatmap.BeatmapParser;
-import itdelatrisu.opsu.beatmap.OszUnpacker;
-import itdelatrisu.opsu.downloads.Updater;
-import itdelatrisu.opsu.replay.ReplayImporter;
-import itdelatrisu.opsu.states.*;
-import yugecin.opsudance.core.DisplayContainer;
-import yugecin.opsudance.core.state.specialstates.BarNotificationState;
-import yugecin.opsudance.core.state.specialstates.BubNotifState;
-import yugecin.opsudance.core.state.specialstates.FpsRenderState;
-import yugecin.opsudance.core.errorhandling.ErrorHandler;
-import yugecin.opsudance.options.Configuration;
-import yugecin.opsudance.options.OptionsService;
-import yugecin.opsudance.render.GameObjectRenderer;
-import yugecin.opsudance.skinning.SkinService;
-
-public class OpsuDanceInjector extends Injector {
-
- protected void configure() {
- bind(Configuration.class).asEagerSingleton();
-
- bind(OptionsService.class).asLazySingleton();
- bind(ReplayImporter.class).asLazySingleton();
- bind(OszUnpacker.class).asLazySingleton();
- bind(BeatmapParser.class).asLazySingleton();
- bind(Updater.class).asLazySingleton();
- bind(SkinService.class).asEagerSingleton();
-
- //bind(PreStartupInitializer.class).asEagerSingleton();
- bind(DisplayContainer.class).asEagerSingleton();
-
- bind(ErrorHandler.class).asEagerSingleton();
-
- bind(FpsRenderState.class).asEagerSingleton();
- bind(BarNotificationState.class).asEagerSingleton();
- bind(BubNotifState.class).asEagerSingleton();
-
- bind(GameObjectRenderer.class).asEagerSingleton();
-
- bind(Splash.class).asEagerSingleton();
- bind(MainMenu.class).asEagerSingleton();
- bind(ButtonMenu.class).asEagerSingleton();
- bind(SongMenu.class).asEagerSingleton();
- bind(DownloadsMenu.class).asEagerSingleton();
- bind(Game.class).asEagerSingleton();
- bind(GameRanking.class).asEagerSingleton();
- bind(GamePauseMenu.class).asEagerSingleton();
- }
-
-}