2018-06-10 21:12:46 -04:00
/*
* Minecraft Forge
2018-09-21 02:17:20 -07:00
* Copyright (c) 2016-2018.
2018-06-10 21:12:46 -04: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
*/
package net.minecraftforge.fml ;
import net.minecraft.client.Minecraft ;
import net.minecraft.server.dedicated.DedicatedServer ;
2018-06-21 15:37:32 -04:00
import net.minecraftforge.api.distmarker.Dist ;
2018-06-19 14:04:05 -04:00
import net.minecraftforge.eventbus.api.Event ;
2018-08-27 13:10:07 -04:00
import net.minecraftforge.fml.client.ClientHooks ;
2018-06-19 14:04:05 -04:00
import net.minecraftforge.fml.common.event.FMLClientInitEvent ;
import net.minecraftforge.fml.common.event.FMLServerInitEvent ;
2018-06-10 21:12:46 -04:00
import net.minecraftforge.fml.loading.FMLEnvironment ;
import java.util.function.Function ;
import java.util.function.Supplier ;
public enum SidedProvider
{
2018-06-22 22:45:01 -04:00
// All of these need to be careful not to directly dereference the client and server elements in their signatures
2018-08-27 13:10:07 -04:00
DATAFIXER ( c -> c . get (). getDataFixer (), s -> s . get (). func_195563_aC ()),
2018-06-22 22:45:01 -04:00
SIDEDINIT (( Function < Supplier < Minecraft > , Function < ModContainer , Event >> ) c -> mc -> new FMLClientInitEvent ( c , mc ),
( Function < Supplier < DedicatedServer > , Function < ModContainer , Event >> ) s -> mc -> new FMLServerInitEvent ( s , mc )),
2018-08-27 13:10:07 -04:00
STRIPCHARS (( Function < Supplier < Minecraft > , Function < String , String >> ) c -> ClientHooks :: stripSpecialChars ,
2018-06-21 15:37:32 -04:00
( Function < Supplier < DedicatedServer > , Function < String , String >> ) s -> str -> str ),
2018-08-27 13:10:07 -04:00
@SuppressWarnings ( "Convert2MethodRef" ) // need to not be methodrefs to avoid classloading all of StartupQuery's data (supplier is coming from StartupQuery)
2018-06-22 22:45:01 -04:00
STARTUPQUERY ( c -> StartupQuery . QueryWrapper . clientQuery ( c ), s -> StartupQuery . QueryWrapper . dedicatedServerQuery ( s ));
2018-06-10 21:12:46 -04:00
private static Supplier < Minecraft > client ;
private static Supplier < DedicatedServer > server ;
public static void setClient ( Supplier < Minecraft > client )
{
SidedProvider . client = client ;
}
public static void setServer ( Supplier < DedicatedServer > server )
{
SidedProvider . server = server ;
}
private final Function < Supplier < Minecraft > , ?> clientSide ;
private final Function < Supplier < DedicatedServer > , ?> serverSide ;
SidedProvider ( Function < Supplier < Minecraft > , ?> clientSide , Function < Supplier < DedicatedServer > , ?> serverSide )
{
this . clientSide = clientSide ;
this . serverSide = serverSide ;
}
@SuppressWarnings ( "unchecked" )
public < T > T get () {
2018-06-21 15:37:32 -04:00
if ( FMLEnvironment . dist == Dist . CLIENT ) {
2018-06-10 21:12:46 -04:00
return ( T ) this . clientSide . apply ( client );
}
2018-06-21 15:37:32 -04:00
else if ( FMLEnvironment . dist == Dist . DEDICATED_SERVER ) {
2018-06-10 21:12:46 -04:00
return ( T ) this . serverSide . apply ( server );
}
else {
throw new IllegalArgumentException ( "THREE SIDES? WUT?" );
}
}
}