2018-06-10 21:12:46 -04:00
/*
* Minecraft Forge
2019-02-10 17:57:03 -05:00
* Copyright (c) 2016-2019.
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 ;
2019-01-14 22:32:43 -05:00
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent ;
import net.minecraftforge.fml.event.lifecycle.FMLDedicatedServerSetupEvent ;
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-12-28 18:05:05 -08:00
DATAFIXER (
c -> c . get (). getDataFixer (),
s -> s . get (). getDataFixer (),
() -> { throw new UnsupportedOperationException (); }),
2019-01-14 22:32:43 -05:00
SIDED_SETUP_EVENT (
( Function < Supplier < Minecraft > , Function < ModContainer , Event >> ) c -> mc -> new FMLClientSetupEvent ( c , mc ),
s -> mc -> new FMLDedicatedServerSetupEvent ( s , mc ),
2018-12-28 18:05:05 -08:00
() -> { throw new UnsupportedOperationException (); }),
STRIPCHARS (
( Function < Supplier < Minecraft > , Function < String , String >> ) c -> ClientHooks :: stripSpecialChars ,
s -> str -> str ,
() -> 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-12-28 18:05:05 -08:00
STARTUPQUERY (
c -> StartupQuery . QueryWrapper . clientQuery ( c ),
s -> StartupQuery . QueryWrapper . dedicatedServerQuery ( s ),
() -> { throw new UnsupportedOperationException (); });
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 ;
2018-12-28 18:05:05 -08:00
private final Supplier <?> testSide ;
2018-06-10 21:12:46 -04:00
2018-12-28 18:05:05 -08:00
< T > SidedProvider ( Function < Supplier < Minecraft > , T > clientSide , Function < Supplier < DedicatedServer > , T > serverSide , Supplier < T > testSide )
2018-06-10 21:12:46 -04:00
{
this . clientSide = clientSide ;
this . serverSide = serverSide ;
2018-12-28 18:05:05 -08:00
this . testSide = testSide ;
2018-06-10 21:12:46 -04:00
}
@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 {
2018-12-28 18:05:05 -08:00
return ( T ) this . testSide . get ();
2018-06-10 21:12:46 -04:00
}
}
2018-09-22 03:40:22 -07:00
}