package speedytools.clientside; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.WorldClient; import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.network.NetHandlerPlayServer; import net.minecraft.world.WorldServer; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; import net.minecraftforge.fml.common.registry.GameRegistry; import speedytools.SpeedyToolsMod; import speedytools.clientside.rendering.ItemEventHandler; import speedytools.clientside.rendering.RenderEventHandlers; import speedytools.clientside.tools.*; import speedytools.clientside.userinput.InputEventHandler; import speedytools.clientside.userinput.SpeedyToolControls; import speedytools.common.CommonProxy; import speedytools.common.SpeedyToolsOptions; import speedytools.common.blocks.RegistryForBlocks; import speedytools.common.items.ItemSpeedyBoundary; import speedytools.common.items.ItemSpeedyOrb; import speedytools.common.items.ItemSpeedyTool; import speedytools.common.items.RegistryForItems; import speedytools.common.utilities.ErrorLog; import java.io.File; import java.io.IOException; import java.nio.file.Path; /** * CombinedClientProxy is used to set up the mod and start it running when installed on a standalone client. * It should not contain any code necessary for proper operation on a DedicatedServer. Code required for both * CombinedClient and dedicated server should go into CommonProxy */ public class CombinedClientProxy extends CommonProxy { /** * Run before anything else. Read your config, create blocks, items, etc, and register them with the GameRegistry */ @Override public void preInit() { ClientSide.preInitialise(); super.preInit(); RegistryForItems.itemSpeedyBoundary.registerVariants(); } /** * Do your mod setup. Build whatever data structures you care about. Register recipes, * send FMLInterModComms messages to other mods. */ @Override public void load() { ClientSide.load(); super.load(); ClientSide.activeTool.registerToolType(RegistryForItems.itemSpeedyWandStrong, new SpeedyToolWandStrong(RegistryForItems.itemSpeedyWandStrong, ClientSide.speedyToolRenderers, ClientSide.speedyToolSounds, ClientSide.undoManagerSimple, ClientSide.packetSenderClient )); ClientSide.activeTool.registerToolType(RegistryForItems.itemSpeedyWandWeak, new SpeedyToolWandWeak(RegistryForItems.itemSpeedyWandWeak, ClientSide.speedyToolRenderers, ClientSide.speedyToolSounds, ClientSide.undoManagerSimple, ClientSide.packetSenderClient )); CommonSelectionState commonSelectionState = new CommonSelectionState(); SpeedyToolBoundary speedyToolBoundary = new SpeedyToolBoundary(RegistryForItems.itemSpeedyBoundary, ClientSide.speedyToolRenderers, ClientSide.speedyToolSounds, ClientSide.undoManagerSimple, ClientSide.packetSenderClient); SpeedyToolOrb speedyToolOrb = new SpeedyToolOrb(RegistryForItems.itemSpeedyOrb, ClientSide.speedyToolRenderers, ClientSide.speedyToolSounds, ClientSide.undoManagerSimple, ClientSide.packetSenderClient); SpeedyToolComplexOrb speedyToolComplexOrb = new SpeedyToolComplexOrb(RegistryForItems.itemSpeedyOrb, ClientSide.speedyToolRenderers, ClientSide.speedyToolSounds, ClientSide.undoManagerComplex, ClientSide.getCloneToolsNetworkClient(), speedyToolBoundary, ClientSide.clientVoxelSelection, commonSelectionState, ClientSide.selectionPacketSenderComplex, ClientSide.packetSenderClient); SpeedyToolSimpleAndComplex simpleComplexOrb = new SpeedyToolSimpleAndComplex(speedyToolOrb, speedyToolComplexOrb, RegistryForItems.itemSpeedyOrb, ClientSide.speedyToolRenderers, ClientSide.speedyToolSounds, ClientSide.undoManagerComplex, ClientSide.packetSenderClient); ClientSide.activeTool.registerToolType(RegistryForItems.itemSpeedyOrb, simpleComplexOrb); SpeedyToolSceptre speedyToolSceptre = new SpeedyToolSceptre(RegistryForItems.itemSpeedySceptre, ClientSide.speedyToolRenderers, ClientSide.speedyToolSounds, ClientSide.undoManagerSimple, ClientSide.packetSenderClient); SpeedyToolComplexSceptre speedyToolComplexSceptre = new SpeedyToolComplexSceptre(RegistryForItems.itemSpeedySceptre, ClientSide.speedyToolRenderers, ClientSide.speedyToolSounds, ClientSide.undoManagerComplex, ClientSide.getCloneToolsNetworkClient(), speedyToolBoundary, ClientSide.clientVoxelSelection, commonSelectionState, ClientSide.selectionPacketSenderComplex, ClientSide.packetSenderClient); SpeedyToolSimpleAndComplex simpleComplexSceptre = new SpeedyToolSimpleAndComplex(speedyToolSceptre, speedyToolComplexSceptre, RegistryForItems.itemSpeedySceptre, ClientSide.speedyToolRenderers, ClientSide.speedyToolSounds, ClientSide.undoManagerComplex, ClientSide.packetSenderClient); ClientSide.activeTool.registerToolType(RegistryForItems.itemSpeedySceptre, simpleComplexSceptre); ClientSide.activeTool.registerToolType(RegistryForItems.itemSpeedyBoundary, speedyToolBoundary); ClientSide.activeTool.registerToolType(RegistryForItems.itemComplexCopy, new SpeedyToolComplexCopy(RegistryForItems.itemComplexCopy, ClientSide.speedyToolRenderers, ClientSide.speedyToolSounds, ClientSide.undoManagerComplex, ClientSide.getCloneToolsNetworkClient(), speedyToolBoundary, ClientSide.clientVoxelSelection, commonSelectionState, ClientSide.selectionPacketSenderComplex, ClientSide.packetSenderClient ) ); ClientSide.activeTool.registerToolType(RegistryForItems.itemComplexDelete, new SpeedyToolComplexDelete(RegistryForItems.itemComplexDelete, ClientSide.speedyToolRenderers, ClientSide.speedyToolSounds, ClientSide.undoManagerComplex, ClientSide.getCloneToolsNetworkClient(), speedyToolBoundary, ClientSide.clientVoxelSelection, commonSelectionState, ClientSide.selectionPacketSenderComplex, ClientSide.packetSenderClient ) ); ClientSide.activeTool.registerToolType(RegistryForItems.itemComplexMove, new SpeedyToolComplexMove(RegistryForItems.itemComplexMove, ClientSide.speedyToolRenderers, ClientSide.speedyToolSounds, ClientSide.undoManagerComplex, ClientSide.getCloneToolsNetworkClient(), speedyToolBoundary, ClientSide.clientVoxelSelection, commonSelectionState, ClientSide.selectionPacketSenderComplex, ClientSide.packetSenderClient ) ); if (SpeedyToolsOptions.getTesterToolsEnabled()) { ClientSide.activeTool.registerToolType(RegistryForItems.itemSpeedyTester, new SpeedyToolTester(RegistryForItems.itemSpeedyTester, ClientSide.speedyToolRenderers, ClientSide.speedyToolSounds, ClientSide.undoManagerSimple, ClientSide.packetSenderClient )); } // MinecraftForgeClient.registerItemRenderer(RegistryForItems.itemSpeedyOrb, new RendererInventoryItemInfinite(RegistryForItems.itemSpeedyOrb)); // MinecraftForgeClient.registerItemRenderer(RegistryForItems.itemSpeedySceptre, new RendererInventoryItemInfinite(RegistryForItems.itemSpeedySceptre)); } /** * Handle interaction with other mods, complete your setup based on this. */ @Override public void postInit() { ClientSide.postInitialise(); super.postInit(); SpeedyToolControls.initialiseInterceptors(); // register item models for the blocks for (String blockName : RegistryForBlocks.getAllItemBlockNames()) { Item itemBlockSimple = GameRegistry.findItem("speedytoolsmod", blockName); ModelResourceLocation itemModelResourceLocation = new ModelResourceLocation(SpeedyToolsMod.prependModID(blockName), "inventory"); final int DEFAULT_ITEM_SUBTYPE = 0; Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(itemBlockSimple, DEFAULT_ITEM_SUBTYPE, itemModelResourceLocation); } // register item models for the blocks for (String itemName : RegistryForItems.getAllItemNames()) { Item itemBlockSimple = GameRegistry.findItem("speedytoolsmod", itemName); ModelResourceLocation itemModelResourceLocation = new ModelResourceLocation(SpeedyToolsMod.prependModID(itemName), "inventory"); if (itemBlockSimple instanceof ItemSpeedyTool) { ItemSpeedyTool itemSpeedyTool = (ItemSpeedyTool)itemBlockSimple; for (int metadata : itemSpeedyTool.validMetadataValues()) { String modelName = itemSpeedyTool.getVariantModelResLoc(itemName, metadata); ModelBakery.addVariantName(itemSpeedyTool, modelName); itemModelResourceLocation = new ModelResourceLocation(modelName, "inventory"); Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(itemBlockSimple, metadata, itemModelResourceLocation); } } else { final int DEFAULT_ITEM_SUBTYPE = 0; Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(itemBlockSimple, DEFAULT_ITEM_SUBTYPE, itemModelResourceLocation); } } MinecraftForge.EVENT_BUS.register(new ItemEventHandler()); MinecraftForge.EVENT_BUS.register(new InputEventHandler()); MinecraftForge.EVENT_BUS.register(new RenderEventHandlers()); FMLCommonHandler.instance().bus().register(new ClientTickHandler()); MinecraftForge.EVENT_BUS.register(new ClientEventHandler()); } /** * Obtains the folder that world save backups should be stored in. * For Integrated Server, this is the saves folder * For Dedicated Server, a new 'backupsaves' folder is created in the same folder that contains the world save directory * * @return the folder where backup saves should be created */ @Override public Path getOrCreateSaveBackupsFolder() throws IOException { return new File(Minecraft.getMinecraft().mcDataDir, "saves").toPath(); } @Override public boolean enqueueMessageOnCorrectThread(MessageContext ctx, Runnable messageProcessor) { switch (ctx.side) { case CLIENT: { Minecraft minecraft = Minecraft.getMinecraft(); minecraft.addScheduledTask(messageProcessor); break; } case SERVER: { NetHandlerPlayServer netHandlerPlayServer = ctx.getServerHandler(); EntityPlayerMP entityPlayerMP = netHandlerPlayServer.playerEntity; final WorldServer playerWorldServer = entityPlayerMP.getServerForPlayer(); playerWorldServer.addScheduledTask(messageProcessor); break; } default: ErrorLog.defaultLog().debug("Invalid side:" + ctx.side + " in enqueueMessageOnCorrectThread"); } return true; } }