/
Proxy.scala
174 lines (138 loc) · 6.28 KB
/
Proxy.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
package li.cil.oc.common
import java.io.File
import com.google.common.base.Strings
import li.cil.oc._
import li.cil.oc.common.entity.Drone
import li.cil.oc.common.init.Blocks
import li.cil.oc.common.init.Items
import li.cil.oc.common.item.Delegator
import li.cil.oc.common.item.traits.Delegate
import li.cil.oc.common.recipe.Recipes
import li.cil.oc.integration.Mods
import li.cil.oc.server._
import li.cil.oc.server.machine.luac.LuaStateFactory
import li.cil.oc.server.machine.luac.NativeLua52Architecture
import li.cil.oc.server.machine.luaj.LuaJLuaArchitecture
import net.minecraft.block.Block
import net.minecraft.item.Item
import net.minecraft.item.ItemStack
import net.minecraftforge.fml.common.FMLLog
import net.minecraftforge.fml.common.event._
import net.minecraftforge.fml.common.network.NetworkRegistry
import net.minecraftforge.fml.common.registry.EntityRegistry
import net.minecraftforge.fml.common.registry.GameRegistry
import net.minecraftforge.oredict.OreDictionary
import scala.collection.convert.WrapAsScala._
class Proxy {
def preInit(e: FMLPreInitializationEvent) {
checkForBrokenJavaVersion()
Settings.load(new File(e.getModConfigurationDirectory, "opencomputers" + File.separator + "settings.conf"))
OpenComputers.log.info("Initializing blocks and items.")
Blocks.init()
Items.init()
OpenComputers.log.info("Initializing additional OreDict entries.")
OreDictionary.registerOre("craftingPiston", net.minecraft.init.Blocks.piston)
OreDictionary.registerOre("craftingPiston", net.minecraft.init.Blocks.sticky_piston)
OreDictionary.registerOre("torchRedstoneActive", net.minecraft.init.Blocks.redstone_torch)
OreDictionary.registerOre("materialEnderPearl", net.minecraft.init.Items.ender_pearl)
val nuggetIron = Items.get(Constants.ItemName.IronNugget).createItemStack(1)
registerExclusive("nuggetIron", nuggetIron)
Delegator.subItem(nuggetIron) match {
case Some(subItem: item.IronNugget) =>
if (OreDictionary.getOres("nuggetIron").exists(nuggetIron.isItemEqual)) {
Recipes.addSubItem(subItem, "nuggetIron")
Recipes.addItem(net.minecraft.init.Items.iron_ingot, "ingotIron")
}
else {
subItem.showInItemList = false
}
case _ =>
}
// Avoid issues with Extra Utilities registering colored obsidian as `obsidian`
// oredict entry, but not normal obsidian, breaking some recipes.
OreDictionary.registerOre("obsidian", net.minecraft.init.Blocks.obsidian)
// To still allow using normal endstone for crafting drones.
OreDictionary.registerOre("oc:stoneEndstone", net.minecraft.init.Blocks.end_stone)
OpenComputers.log.info("Initializing OpenComputers API.")
api.CreativeTab.instance = CreativeTab
api.API.driver = driver.Registry
api.API.fileSystem = fs.FileSystem
api.API.items = Items
api.API.machine = machine.Machine
api.API.nanomachines = nanomachines.Nanomachines
api.API.network = network.Network
api.API.config = Settings.get.config
api.Machine.LuaArchitecture =
if (LuaStateFactory.isAvailable && !Settings.get.forceLuaJ) classOf[NativeLua52Architecture]
else classOf[LuaJLuaArchitecture]
api.Machine.add(api.Machine.LuaArchitecture)
if (Settings.get.registerLuaJArchitecture)
api.Machine.add(classOf[LuaJLuaArchitecture])
}
def init(e: FMLInitializationEvent) {
OpenComputers.channel = NetworkRegistry.INSTANCE.newEventDrivenChannel("OpenComputers")
OpenComputers.channel.register(server.PacketHandler)
Loot.init()
Achievement.init()
EntityRegistry.registerModEntity(classOf[Drone], "Drone", 0, OpenComputers, 80, 1, true)
OpenComputers.log.info("Initializing mod integration.")
Mods.init()
OpenComputers.log.info("Initializing recipes.")
Recipes.init()
api.API.isPowerEnabled = !Settings.get.ignorePower
}
def postInit(e: FMLPostInitializationEvent) {
// Don't allow driver registration after this point, to avoid issues.
driver.Registry.locked = true
}
def registerModel(instance: Delegate, id: String): Unit = {}
def registerModel(instance: Item, id: String): Unit = {}
def registerModel(instance: Block, id: String): Unit = {}
private def registerExclusive(name: String, items: ItemStack*) {
if (OreDictionary.getOres(name).isEmpty) {
for (item <- items) {
OreDictionary.registerOre(name, item)
}
}
}
// Yes, this could be boiled down even further, but I like to keep it
// explicit like this, because it makes it a) clearer, b) easier to
// extend, in case that should ever be needed.
// Example usage: OpenComputers.ID + ":rack" -> "serverRack"
private val blockRenames = Map[String, String](
)
// Example usage: OpenComputers.ID + ":tabletCase" -> "tabletCase1"
private val itemRenames = Map[String, String](
OpenComputers.ID + ":dataCard" -> Constants.ItemName.DataCardTier1
)
def missingMappings(e: FMLMissingMappingsEvent) {
for (missing <- e.get()) {
if (missing.`type` == GameRegistry.Type.BLOCK) {
blockRenames.get(missing.name) match {
case Some(name) =>
if (Strings.isNullOrEmpty(name)) missing.ignore()
else missing.remap(GameRegistry.findBlock(OpenComputers.ID, name))
case _ => missing.warn()
}
}
else if (missing.`type` == GameRegistry.Type.ITEM) {
itemRenames.get(missing.name) match {
case Some(name) =>
if (Strings.isNullOrEmpty(name)) missing.ignore()
else missing.remap(GameRegistry.findItem(OpenComputers.ID, name))
case _ => missing.warn()
}
}
}
}
// OK, seriously now, I've gotten one too many bug reports because of this Java version being broken.
private final val BrokenJavaVersions = Set("1.6.0_65, Apple Inc.")
def isBrokenJavaVersion = {
val javaVersion = System.getProperty("java.version") + ", " + System.getProperty("java.vendor")
BrokenJavaVersions.contains(javaVersion)
}
def checkForBrokenJavaVersion() = if (isBrokenJavaVersion) {
FMLLog.bigWarning("You're using a broken Java version! Please update now, or remove OpenComputers. DO NOT REPORT THIS! UPDATE YOUR JAVA!")
throw new Exception("You're using a broken Java version! Please update now, or remove OpenComputers. DO NOT REPORT THIS! UPDATE YOUR JAVA!")
}
}