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