Last active
May 4, 2018 20:48
-
-
Save AlexCouch/b2dbfad681b2717381fca2202b5d8705 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.google.common.reflect.TypeToken | |
import com.google.gson.Gson | |
import com.google.gson.GsonBuilder | |
import com.google.gson.stream.JsonReader | |
import com.google.gson.stream.JsonWriter | |
import net.minecraft.client.Minecraft | |
import net.minecraft.entity.player.EntityPlayerMP | |
import net.minecraft.util.text.TextComponentString | |
import net.minecraft.world.WorldServer | |
import net.minecraftforge.event.world.WorldEvent | |
import net.minecraftforge.fml.common.Mod | |
import net.minecraftforge.fml.common.event.FMLInitializationEvent | |
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent | |
import net.minecraftforge.fml.common.gameevent.PlayerEvent | |
import java.io.* | |
const val modid = "alc" | |
const val name = "Universal Settings" | |
const val version = "1.0" | |
var gson: Gson? = null | |
var jsonw: JsonWriter? = null | |
var jsonr: JsonReader? = null | |
val jsonfile = File("default-settings.json") | |
val filer: FileReader = FileReader(jsonfile) | |
get(){ | |
if(!jsonfile.exists()){ | |
if(jsonfile.createNewFile()){ | |
return field | |
} | |
} | |
return field | |
} | |
val filew: FileWriter = FileWriter(jsonfile) | |
get(){ | |
if(!jsonfile.exists()){ | |
if(jsonfile.createNewFile()){ | |
return field | |
} | |
} | |
return field | |
} | |
val defaultSettingsExist = filer.readLines().isNotEmpty() | |
var settings: ArrayList<Setting> = arrayListOf() | |
val mc = Minecraft.getMinecraft() | |
var rulesLoaded = false | |
@Mod(modid=modid, name=name, version=version, modLanguageAdapter="net.shadowfacts.forgelin.KotlinAdapter") | |
object UniversalSettings{ | |
@Mod.EventHandler | |
fun preInit(event: FMLInitializationEvent){ | |
initGson() | |
if(defaultSettingsExist){ | |
loadDefaultSettings() | |
return | |
} | |
generateDefaultSettings() | |
} | |
} | |
fun initGson(){ | |
val deserializer = StupidDeserializer() | |
val serializer = StupidSerializer() | |
gson = GsonBuilder().registerTypeAdapter(object : TypeToken<ArrayList<Setting>>(){}.rawType, deserializer) | |
.registerTypeAdapter(object : TypeToken<ArrayList<Setting>>(){}.rawType, serializer) | |
.setPrettyPrinting() | |
.create() | |
jsonw = gson?.newJsonWriter(filew) | |
jsonr = gson?.newJsonReader(filer) | |
} | |
@Mod.EventBusSubscriber(modid=modid) | |
object Events{ | |
@JvmStatic | |
@SubscribeEvent | |
fun onWorldLoad(event: WorldEvent.Load){ | |
if(event.world is WorldServer){ | |
setWorldSettings(event.world) | |
} | |
} | |
@JvmStatic | |
@SubscribeEvent | |
fun onPlayerLoggedIn(event: PlayerEvent.PlayerLoggedInEvent){ | |
if(rulesLoaded){ | |
if(event.player is EntityPlayerMP){ | |
val player = event.player as EntityPlayerMP | |
player.sendMessage(TextComponentString("Rules have been set to saved defaults!")) | |
} | |
} | |
} | |
} | |
class Setting( | |
val name: String, | |
val value: String, | |
val rule: Boolean | |
) | |
fun loadDefaultSettings(){ | |
settings.clear() | |
settings = gson?.fromJson(jsonr, object : TypeToken<ArrayList<Setting>>(){}.rawType)!! | |
jsonr?.close() | |
setGameSettings() | |
} | |
fun generateDefaultSettings(){ | |
settings.add(Setting("doDaylightCycle", "false", true)) | |
settings.add(Setting("sound_master", "0", false)) | |
settings.add(Setting("ao", "1", false)) | |
jsonw?.jsonValue(gson toJson settings) | |
jsonw?.close() | |
setGameSettings() | |
} | |
infix fun Gson?.toJson(any: Any): String = this?.toJson(any)!! | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment