Move several Dependency Injectors into the API

This commit is contained in:
James Seibel
2022-09-13 21:38:57 -05:00
parent cceb2c38e4
commit f6a1901ef8
42 changed files with 114 additions and 77 deletions
@@ -1,7 +1,7 @@
package com.seibel.lod.api.items.interfaces.override;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.dependencyInjection.IOverrideInjector;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IOverrideInjector;
/**
* Implemented by all DhApi objects that can be overridden.
@@ -1,6 +1,6 @@
package com.seibel.lod.api.methods.events.interfaces;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
/**
* A combination of all interfaces required by all
@@ -17,7 +17,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.seibel.lod.core.dependencyInjection;
package com.seibel.lod.core.DependencyInjection;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IDependencyInjector;
import java.util.ArrayList;
import java.util.HashMap;
@@ -17,26 +17,23 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.seibel.lod.core.dependencyInjection;
package com.seibel.lod.core.DependencyInjection;
import com.seibel.lod.api.methods.events.interfaces.IDhApiEvent;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IDhApiEventInjector;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.ArrayList;
/**
* This class takes care of dependency injection for mods accessors. (for mod compatibility
* support). <Br> <Br>
*
* If a IModAccessor returns null either that means the mod isn't loaded in the game
* or an Accessor hasn't been implemented for the given Minecraft version.
*
* This class takes care of dependency injection for API events.
*
* @author James Seibel
* @author Leetom
* @version 2022-8-15
* @version 2022-9-13
*/
public class DhApiEventInjector extends DependencyInjector<IDhApiEvent> // Note to self: Don't try adding a generic type to IDhApiEvent, the consturctor won't accept it
public class DhApiEventInjector extends DependencyInjector<IDhApiEvent> implements IDhApiEventInjector // Note to self: Don't try adding a generic type to IDhApiEvent, the consturctor won't accept it
{
private static final Logger LOGGER = LogManager.getLogger(DhApiEventInjector.class.getSimpleName());
@@ -50,12 +47,7 @@ public class DhApiEventInjector extends DependencyInjector<IDhApiEvent> // Note
}
/**
* Unlinks the given event handler, preventing the handler from being called in the future.
*
* @throws IllegalArgumentException if the implementation object doesn't implement the interface
* @return true if the handler was unbound, false if the handler wasn't bound.
*/
@Override
public boolean unbind(Class<? extends IDhApiEvent> dependencyInterface, Class<? extends IDhApiEvent> dependencyClassToRemove) throws IllegalArgumentException
{
// make sure the given dependency implements the necessary interfaces
@@ -99,14 +91,7 @@ public class DhApiEventInjector extends DependencyInjector<IDhApiEvent> // Note
return false;
}
/**
* Fires all bound events of the given type (does nothing if no events are bound).
*
* @param dependencyInterface event type
* @param eventParameterObject event parameter
* @return if any of the events returned that this event should be canceled.
* @param <T> the parameter type taken by the event handlers.
*/
@Override
public <T, U extends IDhApiEvent<T>> boolean fireAllEvents(Class<U> dependencyInterface, T eventParameterObject)
{
boolean cancelEvent = false;
@@ -17,9 +17,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.seibel.lod.core.dependencyInjection;
package com.seibel.lod.core.DependencyInjection;
import com.seibel.lod.api.items.interfaces.override.IDhApiOverrideable;
import com.seibel.lod.core.interfaces.dependencyInjection.IOverrideInjector;
import com.seibel.lod.core.util.StringUtil;
import java.util.HashMap;
@@ -1,6 +1,7 @@
package com.seibel.lod.core.dependencyInjection;
package com.seibel.lod.core.DependencyInjection;
import com.seibel.lod.api.items.interfaces.override.IDhApiOverrideable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
import java.util.ArrayList;
@@ -17,10 +17,11 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.seibel.lod.core.dependencyInjection;
package com.seibel.lod.core.DependencyInjection;
import com.seibel.lod.api.items.interfaces.override.worldGenerator.IDhApiWorldGenerator;
import com.seibel.lod.api.items.interfaces.world.IDhApiLevelWrapper;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
import com.seibel.lod.core.util.StringUtil;
import java.util.HashMap;
@@ -19,8 +19,6 @@
package com.seibel.lod.core;
import java.util.Locale;
/**
* This file is similar to mcmod.info
* <br>
@@ -50,6 +48,5 @@ public final class ModInfo
public static final int API_MAJOR_VERSION = 0;
/** This version should be updated whenever new methods are added to the DH API */
public static final int API_MINOR_VERSION = 0;
}
@@ -17,7 +17,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.seibel.lod.core.dependencyInjection;
package com.seibel.lod.core.interfaces.dependencyInjection;
/**
* Necessary for all singletons that can be dependency injected.
@@ -1,4 +1,4 @@
package com.seibel.lod.core.dependencyInjection;
package com.seibel.lod.core.interfaces.dependencyInjection;
import java.util.ArrayList;
@@ -0,0 +1,51 @@
/*
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
* licensed under the GNU LGPL v3 License.
*
* Copyright (C) 2020-2022 James Seibel
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, version 3.
*
* This program 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.seibel.lod.core.interfaces.dependencyInjection;
import com.seibel.lod.api.methods.events.interfaces.IDhApiEvent;
/**
* This class takes care of dependency injection for API events.
*
* @author James Seibel
* @version 2022-9-13
*/
public interface IDhApiEventInjector extends IDependencyInjector<IDhApiEvent> // Note to self: Don't try adding a generic type to IDhApiEvent, the consturctor won't accept it
{
/**
* Unlinks the given event handler, preventing the handler from being called in the future.
*
* @throws IllegalArgumentException if the implementation object doesn't implement the interface
* @return true if the handler was unbound, false if the handler wasn't bound.
*/
public boolean unbind(Class<? extends IDhApiEvent> dependencyInterface, Class<? extends IDhApiEvent> dependencyClassToRemove) throws IllegalArgumentException;
/**
* Fires all bound events of the given type (does nothing if no events are bound).
*
* @param dependencyInterface event type
* @param eventParameterObject event parameter
* @return if any of the events returned that this event should be canceled.
* @param <T> the parameter type taken by the event handlers.
*/
public <T, U extends IDhApiEvent<T>> boolean fireAllEvents(Class<U> dependencyInterface, T eventParameterObject);
}
@@ -1,4 +1,4 @@
package com.seibel.lod.core.dependencyInjection;
package com.seibel.lod.core.interfaces.dependencyInjection;
import com.seibel.lod.api.items.interfaces.override.IDhApiOverrideable;
@@ -20,7 +20,7 @@
package com.seibel.lod.core;
import com.seibel.lod.api.items.enums.rendering.EFogDrawMode;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
/**
* A singleton used to get variables from methods
@@ -19,6 +19,8 @@
package com.seibel.lod.core.dependencyInjection;
import com.seibel.lod.core.DependencyInjection.DependencyInjector;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
import com.seibel.lod.core.logging.DhLoggerBuilder;
import com.seibel.lod.core.wrapperInterfaces.modAccessor.IModAccessor;
import org.apache.logging.log4j.Logger;
@@ -19,6 +19,9 @@
package com.seibel.lod.core.dependencyInjection;
import com.seibel.lod.core.DependencyInjection.DependencyInjector;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
/**
* This class takes care of dependency injection
* for singletons.
@@ -19,7 +19,7 @@
package com.seibel.lod.core.wrapperInterfaces;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
/**
* A singleton that contains variables specific to each version of Minecraft
@@ -20,7 +20,7 @@
package com.seibel.lod.core.wrapperInterfaces;
import com.seibel.lod.core.level.ILevel;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
import com.seibel.lod.core.wrapperInterfaces.block.IBlockStateWrapper;
import com.seibel.lod.core.wrapperInterfaces.world.IBiomeWrapper;
import com.seibel.lod.core.wrapperInterfaces.worldGeneration.AbstractBatchGenerationEnvionmentWrapper;
@@ -19,7 +19,7 @@
package com.seibel.lod.core.wrapperInterfaces.chunk;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
import com.seibel.lod.core.pos.DhChunkPos;
import com.seibel.lod.core.util.LodUtil;
import com.seibel.lod.core.wrapperInterfaces.block.IBlockStateWrapper;
@@ -1,6 +1,6 @@
package com.seibel.lod.core.wrapperInterfaces.config;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
public interface IConfigWrapper extends IBindable {
@@ -22,7 +22,7 @@ package com.seibel.lod.core.wrapperInterfaces.config;
import com.seibel.lod.api.items.enums.config.*;
import com.seibel.lod.api.items.enums.rendering.*;
import com.seibel.lod.core.config.Config;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
import com.seibel.lod.core.dependencyInjection.SingletonInjector;
import com.seibel.lod.core.render.fog.FogSettings;
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
@@ -24,7 +24,7 @@ import java.util.ArrayList;
import com.seibel.lod.core.ModInfo;
import com.seibel.lod.core.enums.ELodDirection;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
import com.seibel.lod.core.pos.DhBlockPos;
import com.seibel.lod.core.pos.DhChunkPos;
import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper;
@@ -22,7 +22,7 @@ package com.seibel.lod.core.wrapperInterfaces.minecraft;
import java.awt.Color;
import java.util.HashSet;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
import com.seibel.lod.core.dependencyInjection.ModAccessorInjector;
import com.seibel.lod.core.dependencyInjection.SingletonInjector;
import com.seibel.lod.core.pos.DhBlockPos;
@@ -1,6 +1,6 @@
package com.seibel.lod.core.wrapperInterfaces.minecraft;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
import java.io.File;
@@ -19,7 +19,7 @@
package com.seibel.lod.core.wrapperInterfaces.minecraft;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
/**
* @author James Seibel
@@ -19,7 +19,7 @@
package com.seibel.lod.core.wrapperInterfaces.misc;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
/**
* @author James Seibel
@@ -19,7 +19,7 @@
package com.seibel.lod.core.wrapperInterfaces.modAccessor;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
/**
* @author Leetom
@@ -19,7 +19,7 @@
package com.seibel.lod.core.wrapperInterfaces.modAccessor;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
/**
* Checks if a mod is loaded
@@ -19,7 +19,7 @@
package com.seibel.lod.core.wrapperInterfaces.world;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
/**
* @author James Seibel
@@ -19,7 +19,7 @@
package com.seibel.lod.core.wrapperInterfaces.world;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
/**
* @author James Seibel
@@ -19,7 +19,7 @@
package com.seibel.lod.core.wrapperInterfaces.world;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
import com.seibel.lod.core.pos.DhBlockPos;
import com.seibel.lod.core.pos.DhChunkPos;
import com.seibel.lod.core.wrapperInterfaces.block.IBlockStateWrapper;
@@ -1,6 +1,6 @@
package testItems.overrideInjection.objects;
import com.seibel.lod.core.dependencyInjection.OverrideInjector;
import com.seibel.lod.core.DependencyInjection.OverrideInjector;
import testItems.overrideInjection.interfaces.IOverrideTest;
/**
@@ -1,6 +1,6 @@
package testItems.overrideInjection.objects;
import com.seibel.lod.core.dependencyInjection.OverrideInjector;
import com.seibel.lod.core.DependencyInjection.OverrideInjector;
import testItems.overrideInjection.interfaces.IOverrideTest;
/**
@@ -1,6 +1,6 @@
package testItems.singletonInjection.interfaces;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
/**
* Dummy test interface for dependency unit tests.
@@ -1,6 +1,6 @@
package testItems.singletonInjection.interfaces;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
/**
* Dummy test interface for dependency unit tests.
@@ -1,6 +1,6 @@
package testItems.singletonInjection.objects;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
import testItems.singletonInjection.interfaces.ISingletonTestOne;
import testItems.singletonInjection.interfaces.ISingletonTestTwo;
@@ -1,7 +1,7 @@
package testItems.singletonInjection.objects;
import com.seibel.lod.core.dependencyInjection.DependencyInjector;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.DependencyInjection.DependencyInjector;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
import testItems.singletonInjection.interfaces.ISingletonTestOne;
import testItems.singletonInjection.interfaces.ISingletonTestTwo;
@@ -1,7 +1,7 @@
package testItems.singletonInjection.objects;
import com.seibel.lod.core.dependencyInjection.DependencyInjector;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.DependencyInjection.DependencyInjector;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
import testItems.singletonInjection.interfaces.ISingletonTestOne;
import testItems.singletonInjection.interfaces.ISingletonTestTwo;
@@ -5,7 +5,7 @@ import com.seibel.lod.api.items.enums.worldGeneration.EDhApiWorldGenerationStep;
import com.seibel.lod.api.items.interfaces.override.worldGenerator.IDhApiWorldGenerator;
import com.seibel.lod.api.items.interfaces.world.IDhApiChunkWrapper;
import com.seibel.lod.api.items.interfaces.world.IDhApiLevelWrapper;
import com.seibel.lod.core.dependencyInjection.OverrideInjector;
import com.seibel.lod.core.DependencyInjection.OverrideInjector;
/**
* Dummy test implementation object for world generator injection unit tests.
@@ -5,10 +5,7 @@ import com.seibel.lod.api.items.enums.worldGeneration.EDhApiWorldGenerationStep;
import com.seibel.lod.api.items.interfaces.override.worldGenerator.IDhApiWorldGenerator;
import com.seibel.lod.api.items.interfaces.world.IDhApiChunkWrapper;
import com.seibel.lod.api.items.interfaces.world.IDhApiLevelWrapper;
import com.seibel.lod.core.enums.worldGeneration.EWorldGenThreadMode;
import com.seibel.lod.core.enums.worldGeneration.EWorldGenerationStep;
import com.seibel.lod.core.dependencyInjection.OverrideInjector;
import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper;
import com.seibel.lod.core.DependencyInjection.OverrideInjector;
/**
* Dummy test implementation object for world generator injection unit tests.
@@ -5,10 +5,7 @@ import com.seibel.lod.api.items.enums.worldGeneration.EDhApiWorldGenerationStep;
import com.seibel.lod.api.items.interfaces.override.worldGenerator.IDhApiWorldGenerator;
import com.seibel.lod.api.items.interfaces.world.IDhApiChunkWrapper;
import com.seibel.lod.api.items.interfaces.world.IDhApiLevelWrapper;
import com.seibel.lod.core.enums.worldGeneration.EWorldGenThreadMode;
import com.seibel.lod.core.enums.worldGeneration.EWorldGenerationStep;
import com.seibel.lod.core.dependencyInjection.OverrideInjector;
import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper;
import com.seibel.lod.core.DependencyInjection.OverrideInjector;
/**
* Dummy test implementation object for world generator injection unit tests.
@@ -3,11 +3,10 @@ package tests;
import com.seibel.lod.api.items.enums.worldGeneration.EDhApiWorldGenThreadMode;
import com.seibel.lod.api.items.interfaces.override.worldGenerator.IDhApiWorldGenerator;
import com.seibel.lod.api.items.interfaces.world.IDhApiLevelWrapper;
import com.seibel.lod.core.dependencyInjection.DependencyInjector;
import com.seibel.lod.core.dependencyInjection.IBindable;
import com.seibel.lod.core.dependencyInjection.OverrideInjector;
import com.seibel.lod.core.dependencyInjection.WorldGeneratorInjector;
import com.seibel.lod.core.enums.worldGeneration.EWorldGenThreadMode;
import com.seibel.lod.core.DependencyInjection.DependencyInjector;
import com.seibel.lod.core.interfaces.dependencyInjection.IBindable;
import com.seibel.lod.core.DependencyInjection.OverrideInjector;
import com.seibel.lod.core.DependencyInjection.WorldGeneratorInjector;
import org.junit.Assert;
import org.junit.Test;