2013-03-08 00:25:48 +00:00
|
|
|
/*
|
2016-06-23 03:49:47 +00:00
|
|
|
* Minecraft Forge
|
2018-07-01 21:17:28 +00:00
|
|
|
* Copyright (c) 2016-2018.
|
2016-06-23 03:49:47 +00:00
|
|
|
*
|
|
|
|
* This library 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 2.1
|
|
|
|
* of the License.
|
|
|
|
*
|
|
|
|
* This library 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 library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
2013-03-08 00:25:48 +00:00
|
|
|
*/
|
|
|
|
|
2014-09-23 05:01:24 +00:00
|
|
|
package net.minecraftforge.fml.common.event;
|
2012-07-14 17:58:46 +00:00
|
|
|
|
2017-06-25 01:08:20 +00:00
|
|
|
import java.util.Arrays;
|
|
|
|
import java.util.Objects;
|
|
|
|
import java.util.Optional;
|
|
|
|
|
2015-11-24 19:44:19 +00:00
|
|
|
import net.minecraftforge.fml.common.FMLLog;
|
2014-09-23 05:01:24 +00:00
|
|
|
import net.minecraftforge.fml.common.Loader;
|
|
|
|
import net.minecraftforge.fml.common.LoaderState.ModState;
|
2012-08-26 01:26:41 +00:00
|
|
|
|
2015-11-24 19:44:19 +00:00
|
|
|
import java.lang.reflect.Constructor;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Called after {@link FMLInitializationEvent} has been dispatched on every mod. This is the third and last
|
|
|
|
* commonly called event during mod initialization.
|
|
|
|
*
|
|
|
|
* Recommended activities: interact with other mods to establish cross-mod behaviours.
|
|
|
|
*
|
|
|
|
* @see net.minecraftforge.fml.common.Mod.EventHandler for how to subscribe to this event
|
|
|
|
* @author cpw
|
|
|
|
*/
|
2012-07-14 17:58:46 +00:00
|
|
|
public class FMLPostInitializationEvent extends FMLStateEvent
|
|
|
|
{
|
2012-07-23 19:03:17 +00:00
|
|
|
public FMLPostInitializationEvent(Object... data)
|
|
|
|
{
|
|
|
|
super(data);
|
|
|
|
}
|
2012-07-14 17:58:46 +00:00
|
|
|
|
2012-07-22 14:26:38 +00:00
|
|
|
@Override
|
|
|
|
public ModState getModState()
|
|
|
|
{
|
|
|
|
return ModState.POSTINITIALIZED;
|
|
|
|
}
|
|
|
|
|
2015-11-24 19:44:19 +00:00
|
|
|
/**
|
|
|
|
* Build an object depending on if a specific target mod is loaded or not.
|
|
|
|
*
|
|
|
|
* Usually would be used to access an object from the other mod.
|
|
|
|
*
|
|
|
|
* @param modId The modId I conditionally want to build an object for
|
|
|
|
* @param className The name of the class I wish to instantiate
|
|
|
|
* @return An optional containing the object if possible, or null if not
|
|
|
|
*/
|
2015-12-15 19:24:02 +00:00
|
|
|
public Optional<?> buildSoftDependProxy(String modId, String className, Object... arguments)
|
2012-08-26 01:26:41 +00:00
|
|
|
{
|
|
|
|
if (Loader.isModLoaded(modId))
|
|
|
|
{
|
2017-06-25 01:08:20 +00:00
|
|
|
Class<?>[] args = Arrays.stream(arguments).filter(Objects::nonNull).map(Object::getClass).toArray(Class<?>[]::new);
|
2012-08-26 01:26:41 +00:00
|
|
|
try
|
|
|
|
{
|
|
|
|
Class<?> clz = Class.forName(className,true,Loader.instance().getModClassLoader());
|
2015-11-24 19:44:19 +00:00
|
|
|
Constructor<?> ct = clz.getConstructor(args);
|
2017-01-11 23:17:56 +00:00
|
|
|
return Optional.of(ct.newInstance(arguments));
|
2012-08-26 01:26:41 +00:00
|
|
|
}
|
|
|
|
catch (Exception e)
|
|
|
|
{
|
2017-06-23 05:33:11 +00:00
|
|
|
FMLLog.log.info("An error occurred trying to build a soft depend proxy", e);
|
2017-06-25 01:08:20 +00:00
|
|
|
return Optional.empty();
|
2012-08-26 01:26:41 +00:00
|
|
|
}
|
|
|
|
}
|
2017-06-25 01:08:20 +00:00
|
|
|
return Optional.empty();
|
2012-08-26 01:26:41 +00:00
|
|
|
}
|
2012-07-14 17:58:46 +00:00
|
|
|
}
|