package fyresmodjam; import java.io.File; import java.util.EnumMap; import java.util.Random; import org.lwjgl.input.Keyboard; import fyresmodjam.blessings.Blessing; import fyresmodjam.blessings.BlessingUtils; import fyresmodjam.commands.CommandCraftingStats; import fyresmodjam.commands.CommandCurrentBlessing; import fyresmodjam.commands.CommandCurrentDisadvantage; import fyresmodjam.commands.CommandCurrentWorldTask; import fyresmodjam.commands.CommandKillStats; import fyresmodjam.commands.CommandWeaponStats; import fyresmodjam.handlers.CommonTickHandler; import fyresmodjam.handlers.GUIHandler; import fyresmodjam.handlers.NewPacketHandler; import fyresmodjam.handlers.NewPacketHandler.ChannelHandler; import fyresmodjam.misc.ArmorStatTracker; import fyresmodjam.misc.CreativeTabModjamMod; import fyresmodjam.misc.EntityStat; import fyresmodjam.misc.EntityStatHelper; import fyresmodjam.misc.EntityStatTracker; import fyresmodjam.misc.ItemStatHelper; import fyresmodjam.misc.ItemStatTracker; import fyresmodjam.misc.WeaponRankStat; import fyresmodjam.worldgen.FyresWorldData; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.command.CommandHandler; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemAxe; import net.minecraft.item.ItemBow; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; import net.minecraft.server.MinecraftServer; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.event.AnvilUpdateEvent; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.Instance; import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.event.FMLServerStartingEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerChangedDimensionEvent; import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent; import net.minecraftforge.fml.common.network.FMLEmbeddedChannel; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.registry.EntityRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; @Mod(modid = "fyresmodjam", name = "Fyres ModJam Mod", version = "0.0.3d") public class ModjamMod extends CommandHandler { @SidedProxy(clientSide = "fyresmodjam.ClientProxy", serverSide = "fyresmodjam.CommonProxy") public static CommonProxy proxy; @Instance("fyresmodjam") public static ModjamMod instance; public static EnumMap channels = NetworkRegistry.INSTANCE .newChannel("YWDMod", new ChannelHandler()); public static Random r = new Random(); public static int achievementID = 2500, examineKey = Keyboard.KEY_X, blessingKey = Keyboard.KEY_K; public static int pillarGenChance = 75, maxPillarsPerChunk = 3, towerGenChance = 225, trapGenChance = 300, mushroomReplaceChance = 15; public static boolean pillarGlow = true, spawnTraps = true, spawnTowers = true, spawnRandomPillars = true, disableDisadvantages = false, versionChecking = true, trapsBelowGroundOnly = false, showAllPillarsInCreative = false, enableWeaponKillStats = true, enableMobKillStats = true, enableCraftingStats = true; public static CreativeTabs tabModjamMod = new CreativeTabModjamMod( CreativeTabs.getNextID(), "The \"You Will Die\" Mod"); public static Block blockPillar; public static Block blockTrap; public static Block mysteryMushroomBlock; public static Item itemPillar; public static Item mysteryPotion; public static Item itemTrap; public static Item mysteryMushroom; public static Item sceptre; public static Item crystalItem; public static Item scroll; public static Block crystal; public static Block crystalStand; /* public static Achievement startTheGame; public static Achievement losingIsFun; public static Achievement whoops; public static Achievement theHunt; public static Achievement jackOfAllTrades; public static AchievementPage page; */ public static String version = "v0.0.3e"; public static String foundVersion = "v0.0.3e"; public static boolean newerVersion = false; public static String configPath = null; @EventHandler public void preInit(FMLPreInitializationEvent event) { File old = new File(event.getSuggestedConfigurationFile() .getAbsolutePath() .replace("fyresmodjam", "YouWillDieMod")); if (old.exists()) { old.delete(); System.out.println(true); } configPath = event.getSuggestedConfigurationFile() .getAbsolutePath().replace("fyresmodjam", "TheYouWillDieMod"); Configuration config = new Configuration( new File(configPath)); config.load(); proxy.loadFromConfig(config); config.save(); // Item and Block loading /* blockPillar = new BlockPillar().setBlockUnbreakable() .setResistance(6000000.0F); blockTrap = new BlockTrap().setBlockUnbreakable() .setResistance(6000000.0F); mysteryMushroomBlock = new BlockMysteryMushroom() .setHardness(0.0F) // .setStepSound(Block.soundTypeGrass) .setLightLevel(0.125F) .setRegistryName("mysteryMushroomBlock"); itemPillar = new ItemPillar() .setUnlocalizedName("blockPillar"); GameRegistry.registerItem(itemPillar, "itemPillar"); mysteryPotion = new ItemMysteryPotion() .setUnlocalizedName("mysteryPotion") .setCreativeTab(CreativeTabs.BREWING); GameRegistry.registerItem(mysteryPotion, "mysteryPotion"); itemTrap = new ItemTrap().setUnlocalizedName("itemTrap") .setCreativeTab(CreativeTabs.REDSTONE); GameRegistry.registerItem(itemTrap, "itemTrap"); mysteryMushroom = new ItemMysteryMushroom() .setUnlocalizedName("mysteryMushroom") .setCreativeTab(CreativeTabs.BREWING); GameRegistry.registerItem(mysteryMushroom, "mysteryMushroom"); sceptre = new ItemObsidianSceptre() .setUnlocalizedName("sceptre") .setCreativeTab(CreativeTabs.TOOLS) .setFull3D(); GameRegistry.registerItem(sceptre, "sceptre"); GameRegistry.registerBlock(blockPillar, "blockPillar"); GameRegistry.registerTileEntity(TileEntityPillar.class, "Pillar Tile Entity"); GameRegistry.registerBlock(blockTrap, "blockTrap"); GameRegistry.registerTileEntity(TileEntityTrap.class, "Trap Entity"); GameRegistry.registerBlock(mysteryMushroomBlock, "mysteryMushroomBlock"); */ /* startTheGame = getNewAchievement(achievementID, 0, 0, new ItemStack(Items.iron_sword, 1), "startTheGame", "You Will Die", "Join a world with this mod installed", null, true); losingIsFun = getNewAchievement(achievementID + 1, -2, 0, new ItemStack(itemTrap, 1), "losingIsFun", "Losing Is Fun", "Experience \"fun\"", startTheGame, false); whoops = getNewAchievement(achievementID + 2, 2, 0, new ItemStack(itemTrap, 1, 1), "whoops", "Whoops", "Fail to disarm a trap", startTheGame, false); theHunt = getNewAchievement(achievementID + 3, 0, -2, new ItemStack(Items.bow, 1), "theHunt", "The Hunt", "Become a competent slayer of 5 or more different creatures", startTheGame, false); jackOfAllTrades = getNewAchievement(achievementID + 4, 0, 2, new ItemStack(Blocks.crafting_table, 1), "jackOfAllTrades", "Jack of All Trades", "Become a novice user of at least 10 different weapons", startTheGame, false); page = new AchievementPage("The \"You Will Die\" Mod", startTheGame, losingIsFun, whoops, theHunt, jackOfAllTrades); AchievementPage.registerAchievementPage(page); */ } @EventHandler public void init(FMLInitializationEvent event) { // Registering CommonTickHandler commonHandler = new CommonTickHandler(); FMLCommonHandler.instance().bus().register(commonHandler); MinecraftForge.EVENT_BUS.register(this); FMLCommonHandler.instance().bus().register(this); new ItemStatHelper().register(); new EntityStatHelper().register(); NetworkRegistry.INSTANCE.registerGuiHandler(this, new GUIHandler()); /* GameRegistry.registerWorldGenerator(new PillarGen(), 0); GameRegistry.registerWorldGenerator( new WorldGenTrapsTowersAndMore(), 0); for (int i = 0; i < 3; i++) { GameRegistry.registerWorldGenerator( new WorldGenMoreDungeons(), 0); } */ //EntityRegistry.registerGlobalEntityID( // EntityMysteryPotion.class, "MysteryPotion", // EntityRegistry.findGlobalUniqueEntityId()); // TODO ensure this is right ResourceLocation loc = new ResourceLocation("MysteryPotion"); /* EntityRegistry.registerModEntity(loc, EntityMysteryPotion.class, "MysteryPotion", 0, instance, 128, 1, true); */ // TODO figure out how to do this /* GameRegistry.addShapelessRecipe( new ItemStack(itemTrap, 1, 0), new Object[] { Blocks.heavy_weighted_pressure_plate, Blocks.cactus }); GameRegistry.addShapelessRecipe( new ItemStack(itemTrap, 1, 1), new Object[] { Blocks.heavy_weighted_pressure_plate, Blocks.torch }); GameRegistry.addShapelessRecipe( new ItemStack(itemTrap, 1, 2), new Object[] { Blocks.heavy_weighted_pressure_plate, new ItemStack(Items.dye, 1, 0) }); for (int i = 0; i < 13; i++) { GameRegistry.addShapelessRecipe( new ItemStack(mysteryPotion, 1, i + 13), new Object[] { new ItemStack(mysteryPotion, 1, i), Items.gunpowder }); GameRegistry.addShapelessRecipe( new ItemStack(mysteryPotion, 1, i), new Object[] { new ItemStack(Items.potionitem, 1, 0), Items.leather, new ItemStack(mysteryMushroom, 1, i) }); } GameRegistry.addRecipe(new ItemStack(sceptre, 1, 0), "X", "Y", "X", 'X', Blocks.obsidian, 'Y', Blocks.end_stone); GameRegistry.addShapelessRecipe( new ItemStack(sceptre, 1, 1), new Object[] { new ItemStack(sceptre, 1, 0), Items.ender_pearl, Items.book }); */ proxy.register(); // Entity Trackers EntityStatTracker playerTracker = new EntityStatTracker( EntityPlayer.class, true); playerTracker.addStat(new EntityStat("BlessingCooldown", "" + 0)); playerTracker.addStat( new EntityStat("BlessingCounter", "" + 0)); EntityStatTracker mobTracker = new EntityStatTracker( EntityMob.class, true); mobTracker.addStat(new EntityLevelStat("Level", "")); EntityStatHelper.addStatTracker(mobTracker); // Item Trackers ItemStatTracker weaponTracker = new ItemStatTracker( new Class[] { ItemSword.class, ItemAxe.class, ItemBow.class }, true); weaponTracker.addStat(new WeaponRankStat("Rank", "")); ItemStatHelper.addStatTracker(weaponTracker); ItemStatTracker armorTracker = new ItemStatTracker( new Class[] { ItemArmor.class }, true); armorTracker.addStat(new ArmorStatTracker("Rank", "")); ItemStatHelper.addStatTracker(armorTracker); // Other for (int i = 0; i < 13; i++) { /* ChestGenHooks.getInfo(ChestGenHooks.DUNGEON_CHEST) .addItem(new WeightedRandomChestContent( mysteryPotion, i, 1, 3, 2)); WorldGenTrapsTowersAndMore.chestGenInfo.addItem( new WeightedRandomChestContent( mysteryPotion, i, 1, 3, 2)); */ } } @EventHandler public void postInit(FMLPostInitializationEvent event) { } @SubscribeEvent public void onPlayerLogin(PlayerLoggedInEvent event) { EntityPlayer player = event.player; if (!player.world.isRemote) { NewPacketHandler.UPDATE_WORLD_DATA.sendToPlayer( player, CommonTickHandler.worldData.potionValues, CommonTickHandler.worldData.potionDurations, CommonTickHandler.worldData .getDisadvantage(), CommonTickHandler.worldData.currentTask, CommonTickHandler.worldData.currentTaskID, CommonTickHandler.worldData.currentTaskAmount, CommonTickHandler.worldData.progress, CommonTickHandler.worldData.tasksCompleted, CommonTickHandler.worldData.enderDragonKilled, ModjamMod.spawnTraps, CommonTickHandler.worldData.rewardLevels, CommonTickHandler.worldData.mushroomColors); String name = CommonTickHandler.worldData.currentTask .equals("Kill") ? FyresWorldData.validMobNames[CommonTickHandler.worldData.currentTaskID] : FyresWorldData.validItems[CommonTickHandler.worldData.currentTaskID] .getDisplayName(); if (CommonTickHandler.worldData.currentTaskAmount > 1) { if (name.contains("Block")) { name = name.replace("Block", "Blocks") .replace("block", "blocks"); } else { name += "s"; } } int index = -1; for (int i = 0; i < FyresWorldData.validDisadvantages.length; i++) { if (FyresWorldData.validDisadvantages[i] .equals(CommonTickHandler.worldData .getDisadvantage())) { index = i; break; } } /* * @TODO move disadvantages into a class */ NewPacketHandler.SEND_MESSAGE.sendToPlayer(player, "\u00A7eWorld disadvantage: " + CommonTickHandler.worldData .getDisadvantage() + (index == -1 ? "" : " (" + FyresWorldData.disadvantageDescriptions[index] + ")")); NewPacketHandler.SEND_MESSAGE.sendToPlayer(player, "\u00A7eWorld goal: " + CommonTickHandler.worldData.currentTask + " " + CommonTickHandler.worldData.currentTaskAmount + " " + name + ". (" + CommonTickHandler.worldData.progress + " " + CommonTickHandler.worldData.currentTask + "ed)"); if (!BlessingUtils.hasBlessing(player)) { String selectedBlessing = BlessingUtils .getPlayerBlessing(); Blessing blessing = BlessingUtils .getBlessingInstance( selectedBlessing); player.getEntityData().setString( "Blessing", selectedBlessing); NewPacketHandler.SEND_MESSAGE.sendToPlayer( player, "\u00A72You've been granted the " + blessing.customName() + ". (Use /currentBlessing to check effect)"); } NewPacketHandler.UPDATE_BLESSING.sendToPlayer( player, player.getEntityData().getString( "Blessing")); if (EntityStatHelper.hasStat(player, "BlessingCounter")) { NewPacketHandler.UPDATE_STAT.sendToPlayer( player, "BlessingCounter", EntityStatHelper.getStat( player, "BlessingCounter")); } if (!player.getEntityData() .hasKey("PotionKnowledge")) { player.getEntityData().setIntArray( "PotionKnowledge", new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }); } NewPacketHandler.UPDATE_POTION_KNOWLEDGE .sendToPlayer(player, player .getEntityData() .getIntArray("PotionKnowledge")); } if (versionChecking && newerVersion) { // TODO see how chat works //player.addChatComponentMessage( // new ChatComponentTranslation( // "fyresmodjam.newVersion")); } //player.triggerAchievement(startTheGame); } @SubscribeEvent public void onPlayerChangedDimension( PlayerChangedDimensionEvent event) { EntityPlayer player = event.player; NewPacketHandler.UPDATE_WORLD_DATA.sendToPlayer(player, CommonTickHandler.worldData.potionValues, CommonTickHandler.worldData.potionDurations, CommonTickHandler.worldData .getDisadvantage(), CommonTickHandler.worldData.currentTask, CommonTickHandler.worldData.currentTaskID, CommonTickHandler.worldData.currentTaskAmount, CommonTickHandler.worldData.progress, CommonTickHandler.worldData.tasksCompleted, CommonTickHandler.worldData.enderDragonKilled, ModjamMod.spawnTraps, CommonTickHandler.worldData.rewardLevels, CommonTickHandler.worldData.mushroomColors); NewPacketHandler.UPDATE_BLESSING.sendToPlayer(player, BlessingUtils.getBlessing(player)); if (EntityStatHelper.hasStat(player, "BlessingCounter")) { NewPacketHandler.UPDATE_STAT.sendToPlayer(player, "BlessingCounter", EntityStatHelper.getStat(player, "BlessingCounter")); } if (!player.getEntityData().hasKey("PotionKnowledge")) { player.getEntityData().setIntArray( "PotionKnowledge", new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }); } NewPacketHandler.UPDATE_POTION_KNOWLEDGE.sendToPlayer( player, player.getEntityData().getIntArray( "PotionKnowledge")); } @SubscribeEvent public void checkBreakSpeed(PlayerEvent.BreakSpeed event) { if (event.getEntityPlayer() != null && BlessingUtils .hasBlessing(event.getEntityPlayer())) { BlessingUtils.getBlessingInstance(BlessingUtils .getBlessing(event.getEntityPlayer())) .checkBreakSpeed(event); } } @EventHandler public void serverStarting(FMLServerStartingEvent event) { initCommands(event); } public void initCommands(FMLServerStartingEvent event) { event.registerServerCommand(new CommandCurrentBlessing()); event.registerServerCommand( new CommandCurrentDisadvantage()); event.registerServerCommand(new CommandCurrentWorldTask()); event.registerServerCommand(new CommandKillStats()); event.registerServerCommand(new CommandWeaponStats()); event.registerServerCommand(new CommandCraftingStats()); } @Override protected MinecraftServer getServer() { // TODO is this right? return Minecraft.getMinecraft().getIntegratedServer(); } /* @SuppressWarnings("deprecation") public static Achievement getNewAchievement(int id, int x, int y, ItemStack stack, String name, String displayName, String desc, Achievement prereq, boolean independent) { Achievement achievement = new Achievement("YWD-" + id, name, x, y, stack, prereq); if (independent) { achievement = achievement.initIndependentStat(); } LanguageRegistry.instance().addStringLocalization( "achievement." + name, "en_US", displayName); LanguageRegistry.instance().addStringLocalization( "achievement." + name + ".desc", "en_US", desc); achievement.registerStat(); return achievement; } */ }