Skip to content

Instantly share code, notes, and snippets.

@AlexCouch
Last active May 4, 2018 20:48
Show Gist options
  • Save AlexCouch/b2dbfad681b2717381fca2202b5d8705 to your computer and use it in GitHub Desktop.
Save AlexCouch/b2dbfad681b2717381fca2202b5d8705 to your computer and use it in GitHub Desktop.
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