<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Java on Colinx Blog</title>
    
    
    
    <link>/tags/java/</link>
    <description>Recent content in Java on Colinx Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 22 Feb 2021 00:00:00 +0000</lastBuildDate>
    
	<atom:link href="/tags/java/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Minecraft 上云笔记 - MC 自定义皮肤并支持联机</title>
      <link>/posts/minecraft%E4%B8%8A%E4%BA%91%E7%AC%94%E8%AE%B0-mc%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%AE%E8%82%A4%E5%B9%B6%E6%94%AF%E6%8C%81%E8%81%94%E6%9C%BA/</link>
      <pubDate>Mon, 22 Feb 2021 00:00:00 +0000</pubDate>
      
      <guid>/posts/minecraft%E4%B8%8A%E4%BA%91%E7%AC%94%E8%AE%B0-mc%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%AE%E8%82%A4%E5%B9%B6%E6%94%AF%E6%8C%81%E8%81%94%E6%9C%BA/</guid>
      <description>
        
          
          
          
        
        
        &lt;!-- # Minecraft 上云笔记 - MC 自定义皮肤并支持联机 --&gt;

&lt;p&gt;方案概述：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;仪表盘 - 红石皮肤站
&lt;a href=&#34;https://mcskin.cn/user&#34;&gt;https://mcskin.cn/user&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[CSL] 万用皮肤补丁 (CustomSkinLoader) - MC 百科 | 最大的 Minecraft 中文 MOD 百科
&lt;a href=&#34;https://www.mcmod.cn/class/883.html&#34;&gt;https://www.mcmod.cn/class/883.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;全员安装皮肤 mod，即可保证所有人都可以看见对方的皮肤&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;使用：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;安装好 forge&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;安装好皮肤补丁的 mod&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;启动一次 MC，让他自动生成配置文件&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;在皮肤站注册，并建立与游戏中角色名字相同的角色并设定皮肤&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;修改&lt;code&gt;&amp;quot;.minecraft\CustomSkinLoader\CustomSkinLoader.json&amp;quot;&lt;/code&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-json&#34;&gt;{
 &amp;quot;version&amp;quot;: &amp;quot;14.12&amp;quot;,
 &amp;quot;loadlist&amp;quot;: [
   {
     &amp;quot;name&amp;quot;: &amp;quot;红石皮肤站&amp;quot;,
     &amp;quot;root&amp;quot;: &amp;quot;https://mcskin.cn/csl/&amp;quot;,
     &amp;quot;type&amp;quot;: &amp;quot;CustomSkinAPI&amp;quot;
   },
   {
     &amp;quot;name&amp;quot;: &amp;quot;Mojang&amp;quot;,
     &amp;quot;type&amp;quot;: &amp;quot;MojangAPI&amp;quot;
   },
......
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;/p&gt;

&lt;p&gt;自定义皮肤站最好排在 Mojang API 的前面，不然的话如果有正版用户起的角色名字和你的一样，就会默认载入他的皮肤（巨坑 +1）&lt;/p&gt;
&lt;/blockquote&gt;

        
        </description>
    </item>
    
    <item>
      <title>Minecraft 上云笔记 - MC 服务器快速搭建&amp;MOD 推荐&amp;性能优化</title>
      <link>/posts/minecraft%E4%B8%8A%E4%BA%91%E7%AC%94%E8%AE%B0-mc%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%BF%AB%E9%80%9F%E6%90%AD%E5%BB%BAmod%E6%8E%A8%E8%8D%90%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/</link>
      <pubDate>Sun, 07 Feb 2021 00:00:00 +0000</pubDate>
      
      <guid>/posts/minecraft%E4%B8%8A%E4%BA%91%E7%AC%94%E8%AE%B0-mc%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%BF%AB%E9%80%9F%E6%90%AD%E5%BB%BAmod%E6%8E%A8%E8%8D%90%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/</guid>
      <description>
        
          
          
          
        
        
        

&lt;!-- # Minecraft 上云笔记 - MC 服务器快速搭建&amp;MOD 推荐&amp;性能优化 --&gt;

&lt;blockquote&gt;
&lt;p&gt;MC 快速上云，学生机轻松带动，三五好友，畅快联机&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&#34;前言-踩坑&#34;&gt;前言&amp;amp;踩坑&lt;/h2&gt;

&lt;p&gt;距离上一次玩 MC 已有四年之久，上次玩的时候还用的是家里的老爷机，连独显都没有，玩个整合包都费劲。如今设备早已更新换代，B 站不少做 MC 的 UP 主的内容挺有趣，于是尝试重新拾起 MC。&lt;/p&gt;

&lt;p&gt;手机端国内只有网易代理，APP 卡顿严重，生态封闭，体验奇差。安卓下载的国际服倒是还不错，不过身为基岩版，与 Java 版的生态并不相通。Github 上找到了可以让基岩版进 Java 版服务器的轮子，不过手机端连接服务器又是一个麻烦事。连接远程服务器又需要登录 Xbox，但是登上了连接的时候又出现奇怪的问题。&lt;/p&gt;

&lt;p&gt;贴吧有人给出解决方案，搭建 VPN，形成局域网，那样服务器会被视为局域网内开放的 MC 服务端。但天朝政策收紧，搭建 PPTP、L2TP 等隧道均未果，严重怀疑云服务商干扰了对应服务的端口。几番权衡决定投归 PC 端的 Java 版，生态丰富而且可以充分利用好硬件性能。&lt;/p&gt;

&lt;h2 id=&#34;mc-服务器快速搭建&#34;&gt;MC 服务器快速搭建&lt;/h2&gt;

&lt;h3 id=&#34;mc-服务端选择&#34;&gt;MC 服务端选择&lt;/h3&gt;

&lt;p&gt;物色了很多 MC 服务端，但看了下主要可用且被应用广泛的就两类，&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Spigot、PaperSpigot 这类加装插件的&lt;/li&gt;
&lt;li&gt;SpongeForge 这类可以加装 Mod 的&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;前者生态目测更丰富些，MCBBS 上的开服板块大部分都是 PaperSpigot 搭建的。但是好像都是那种几十上百人的公用服务器，什么权限控制、小游戏、防作弊的插件居多，而我只是想要一个能够装 Mod 的可以供三五好友方便联机的服务器。我的选择是后者&lt;/p&gt;

&lt;h3 id=&#34;mc-服务器快速搭建-1&#34;&gt;MC 服务器快速搭建&lt;/h3&gt;

&lt;p&gt;搭建方案千千万，不过 Docker 来的最实在。Github 找到一个非常方便的镜像，&lt;a href=&#34;https://github.com/itzg/docker-minecraft-server&#34;&gt;itzg/minecraft-server&lt;/a&gt;。这个镜像是运行时构建的，会根据指定的环境变量下载和安装对应的 MC 服务端程序。支持的服务端有 Bukkit、Spigot、PaperSpigot、SpongeForge 等等，MC 的版本和各项参数均支持通过环境变量自定义，非常方便。而且可以通过更换不同的 Tag 来使用不同的 JDK 版本，从 8 到 15，Hotspot 和 OpenJ9 都有，可以按需选用。有 arm 版本，树莓派也可食用。&lt;/p&gt;

&lt;p&gt;安装 Docker 和 docker-compose 后，可以方便地编写脚本来快速启动一个 MC 服务器。这里放上我的&lt;code&gt;docker-compose.yml&lt;/code&gt;文件&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;version: &amp;quot;3&amp;quot;
# Forge with Sponge API support. THIS REQUIRES DOWNLOADING SPONGEFORGE.
# Place the SpongeForge jar file in /data/mods. Other Forge mods go here as well.
# Place Sponge mods in /data/mods/plugins. Yes, this is a directory inside the Forge mod directory. Do NOT use /data/plugins.

services:
  minecraft:
    image: itzg/minecraft-server
    container_name: &amp;quot;MCServer&amp;quot;
    ports:
      - &amp;quot;25565:25565&amp;quot;
    volumes:
      - &amp;quot;mc:/data&amp;quot; # 主要数据，包括存档数据等
      - &amp;quot;~/.minecraft/forgemods/:/data/mods/&amp;quot; #Forge Mod 位置
      # - &amp;quot;~/.minecraft/sponegemods/:/data/mods/plugins&amp;quot;
      - &amp;quot;~/.minecraft/tmp/:/tmp&amp;quot; # Forge 下载失败可以自己放进去
      - /etc/timezone:/etc/timezone:ro #绑定本机的时区，方便看日志
    environment:
      SERVER_NAME: &amp;quot;MCServer&amp;quot;
      EULA: &amp;quot;TRUE&amp;quot;
      VERSION: &amp;quot;1.12.2&amp;quot; #(Ensure this is compatbile with the version of SpongeForge you are using!)
      TYPE: &amp;quot;FORGE&amp;quot; # 这里以 SpongeForge 的服务端为例，其他服务端也支持
      FORGEVERSION: &amp;quot;RECOMMENDED&amp;quot;
      # FORGEVERSION: &amp;quot;14.23.5.2854&amp;quot;
      CONSOLE: &amp;quot;false&amp;quot;
      ENABLE_RCON: &amp;quot;true&amp;quot;
      RCON_PASSWORD: &amp;quot;mcserver&amp;quot;
      RCON_PORT: 28016
      INIT_MEMORY: 512M
      MAX_MEMORY: 1536M # 内存根据实际需要修改
      OVERRIDE_SERVER_PROPERTIES: &amp;quot;true&amp;quot; 
      SNOOPER_ENABLED: &amp;quot;false&amp;quot; # 统计数据
      VIEW_DISTANCE: 8 #加载区块范围，默认 10，建议 4~8
      SEED: &amp;quot;-505794890&amp;quot; # 初始生成世界的种子
      PVP: &amp;quot;true&amp;quot;
      ONLINE_MODE: &amp;quot;FALSE&amp;quot; #正版校验开关
      ALLOW_FLIGHT: &amp;quot;FALSE&amp;quot; 
      USE_AIKAR_FLAGS: &amp;quot;false&amp;quot; # 一些优化
      RESOURCE_PACK: &amp;quot;https://blog-1301127393.file.myqcloud.com/MC/Distribution/VNR-1.0.1.zip&amp;quot; # 我自己会用的资源包，这里填 url
      NETWORK_COMPRESSION_THRESHOLD: 512 # 网络优化
    restart: unless-stopped
  rcon:
    image: itzg/rcon  # 服务器远程管理面板，具体使用自行百度
    container_name: &amp;quot;RCON&amp;quot;
    depends_on:
      - minecraft
    ports: #这两个端口都需要防火墙放行
      - &amp;quot;3000:4326&amp;quot; # Web UI
      - &amp;quot;4327:4327&amp;quot; # Connection from Web UI
    volumes:
      - &amp;quot;rcon:/opt/rcon-web-admin/db&amp;quot;
      - /etc/timezone:/etc/timezone:ro
    environment:
      RWA_ENV: &amp;quot;TRUE&amp;quot;
      RWA_ADMIN: &amp;quot;TRUE&amp;quot;
      RWA_PASSWORD: &amp;quot;mcadmin&amp;quot;
      RWA_RCON_HOST: &amp;quot;MCServer&amp;quot;
      RWA_RCON_PASSWORD: &amp;quot;mcserver&amp;quot; # RCON server to control
      RWA_RCON_PORT: 28016
    restart: unless-stopped

volumes:
  mc:
  rcon:

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;环境变量可以设置的地方非常多，可以到项目主页的 README 查看。&lt;a href=&#34;https://github.com/itzg/docker-minecraft-server&#34;&gt;https://github.com/itzg/docker-minecraft-server&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker-compose up -d&lt;/code&gt; 启动，第一次启动他会下载 MC、下载 MC 服务端、初始化世界。之后就可以在 MC 客户端连接了。（启动完毕就测试一下，测试没问题再进行后面安装 mod、服务器调优（按需）的步骤！）&lt;/p&gt;

&lt;h2 id=&#34;mc-客户端安装&#34;&gt;MC 客户端安装&lt;/h2&gt;

&lt;h3 id=&#34;mc-启动器选择&#34;&gt;MC 启动器选择&lt;/h3&gt;

&lt;p&gt;（正版玩家略过，现在貌似正版购买的只支持官方启动器）&lt;/p&gt;

&lt;p&gt;对于服务器选择，MCBBS 有一篇讲的挺详细，可以到这里挑选：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;我的世界 Minecraft Java 版 下载指南 | 文件结构说明 | 推荐启动器 - 软件资源 - Minecraft(我的世界) 中文论坛 -
&lt;a href=&#34;https://www.mcbbs.net/forum.php?mod=viewthread&amp;amp;tid=38297&amp;amp;page=1#pid547821&#34;&gt;https://www.mcbbs.net/forum.php?mod=viewthread&amp;amp;tid=38297&amp;amp;page=1#pid547821&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;我推荐的启动器：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HMCL&lt;/strong&gt;（力荐！跨平台、颜值高、功能完备，不过需要先装 Java)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BMCL&lt;/strong&gt;（次推荐，颜值略低，基于.Net，功能完备）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;我不推荐的启动器：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nsiso&lt;/strong&gt; （页面倒是做的漂亮，但是我装完 mod 启动竟然启动不了，兼容性或者说功能完备性欠缺，不知道后续版本如何。当时出问题之后我换 HMCL 就可以完美启动）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;上一张 HMCL 的主页的图：&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205913.png&#34; alt=&#34;image-20210129172401421&#34; /&gt;&lt;/p&gt;

&lt;p&gt;其他没有使用过的启动器暂时不予评价。&lt;/p&gt;

&lt;h3 id=&#34;mc-本体安装&#34;&gt;MC 本体安装&lt;/h3&gt;

&lt;p&gt;（正版玩家略过、整合包玩家略过）&lt;/p&gt;

&lt;p&gt;推荐方式为启动器内安装，还可以顺带把 Forge 和 OptiFine 也安装了。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Forge：安装第三方 Mod 需要&lt;/li&gt;
&lt;li&gt;OptiFine：游戏显示调优，有些光影会需要。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;版本选择的话，我的选择是 1.12.2。目前 Mod 支持比较完备，生态也很丰富。很多 Mod 最高只支持 1.12.2，目测是后面官方更新了 API 啥的。当然倾向于原版的同学可以选择更新的 1.16，后面的版本有很多有意思的更新。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;踩坑笔记&lt;/strong&gt;：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;这些启动器大多带有三个下载源：官方服务器、MCBBS 镜像和 BMCL 镜像。不过我当时安装的时候 BMCL 的镜像抽风了，下载一直没进度。建议选择 MCBBS 的源（虽然可能部分内容更新没有很勤）&lt;/li&gt;
&lt;li&gt;通过启动器自动安装 OptiFine 的时候一直报错，换版本也是一样。后来的解决方案是选择窗口上方的【从本地文件安装/升级】&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;h2 id=&#34;mod-推荐&#34;&gt;Mod 推荐&lt;/h2&gt;

&lt;p&gt;针对我实际使用和测试的情况做一些推荐。下文所有 Mod 均在 1.12.2 下测试并实际使用过，兼容性良好。&lt;/p&gt;

&lt;h3 id=&#34;功能增强型-mod-客户端必装&#34;&gt;功能增强型 Mod（客户端必装）&lt;/h3&gt;

&lt;p&gt;这部分 Mod 主要是部分音效和部分不涉及多人游戏的功能的增强，可以随意安装，装不装都不影响好友联机与进服务器。&lt;/p&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mod 名称&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DynamicSurroundings&lt;/td&gt;
&lt;td&gt;动态环境音效，比如草地有蟋蟀的声音，夜晚有狼的声音，使游戏很有沉浸感&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;SoundFilters&lt;/td&gt;
&lt;td&gt;环绕音效，使得 MC 里所有的声音更真实，比如矿洞里的脚步声会有回音，房子里面听外面的声音会更小等等&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;BetterHUD&lt;/td&gt;
&lt;td&gt;加强版的 HUD 信息显示，比如方位信息、坐标信息、时间信息、人物护甲、健康状态信息等等很多功能，而且可自定义程度也很高。&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;JEI&lt;/td&gt;
&lt;td&gt;可以方便地查看物品的合成表，一般整合包必备的插件&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;JustEnoughCharacters&lt;/td&gt;
&lt;td&gt;JEI 的扩展，支持按拼音、简拼搜索物品&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Journeymap&lt;/td&gt;
&lt;td&gt;旅行地图，貌似已经停更，但是功能上没有什么欠缺。支持小地图显示、快速传送等。也是一般整合包必备的插件&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;InventoryTweaks&lt;/td&gt;
&lt;td&gt;按 R 键整理背包&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&#34;功能增强型-mod-服务端-客户端都必装&#34;&gt;功能增强型 Mod（服务端&amp;amp;客户端都必装）&lt;/h3&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mod 名称&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;FTB-Ultimine&lt;/td&gt;
&lt;td&gt;超级挖掘，挖矿、清理场地好帮手&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Doubledoors&lt;/td&gt;
&lt;td&gt;双开门可以一键开关，不用挨个点击开关啦&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;OpenGlider&lt;/td&gt;
&lt;td&gt;滑翔翼，经济实用的交通工具&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Quark&lt;/td&gt;
&lt;td&gt;对原版 MC 的很多地方进行了一些加强，我最喜欢的是他增加了纸墙和纸灯笼这类物品，可以建造一些日系的建筑（文末有图）&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;KeepingInventory&lt;/td&gt;
&lt;td&gt;死亡不掉落，不解释，小白福音&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&#34;内容增强型-mod-服务端-客户端都必装&#34;&gt;内容增强型 Mod（服务端&amp;amp;客户端都必装）&lt;/h3&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mod 名称&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Natura&lt;/td&gt;
&lt;td&gt;添加了很多有意思的植物，整个世界变得生机勃勃，可以种樱花树，初期没食物还可以野外采蓝莓吃&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;MrCrayfish`s Vehicle Mod&lt;/td&gt;
&lt;td&gt;载具 Mod，可以在 MC 开车哦&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Animania&lt;/td&gt;
&lt;td&gt;动物谷，更多的小动物、更加真实的动物喂养与繁殖&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Twilightforest&lt;/td&gt;
&lt;td&gt;鼎鼎有名的暮色森林，不解释&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&#34;谨慎选用的-mod&#34;&gt;谨慎选用的 Mod&lt;/h3&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mod 名称&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LootBags&lt;/td&gt;
&lt;td&gt;击杀怪物得到战利品带，随机开出各种物品。不过你的箱子很快就会被一堆奇奇怪怪的东西堆满（比如我有一大箱无用的钻石马铠）&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Cuisine&lt;/td&gt;
&lt;td&gt;中文名烹饪工艺，国人作者开发的 Mod，挺有趣，很好地还原了做菜的过程，做完之后的菜会获得药水一样的效果。不过目测已经停更，而且没有很好的教程&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：上面列举的所有 Mod 都是 Mod 本体，有些 Mod 的功能还依赖于其他 Mod，在安装时必须同时安装 Mod 本体和他依赖的 Mod。具体的依赖关系可以参考 mcmod.cn 上对 Mod 介绍页的 Mod 关系选项卡，CurseForge 的 Mod 介绍页的 Relation 选项卡。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;踩坑笔记&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;R 键整理的快捷键与 JEI 的部分功能冲突，可自行修改快捷键&lt;/li&gt;
&lt;li&gt;R 键整理对烹饪工艺中生产出来的菜品没辙&lt;/li&gt;
&lt;li&gt;推荐仅将 FTB-Ultimine 用于挖泥巴和挖沙，实际使用时可能会出现挖了矿不掉东西的情况┭┮﹏┭┮&lt;/li&gt;
&lt;li&gt;不要用铁镐、钻石镐开 FTB-Ultimine 挖东西！耐久掉的飞快&lt;/li&gt;
&lt;li&gt;DynamicSurroundings 可以在设置里按需屏蔽特定的声音，比如装上后发现我家所在的地形会有乌鸦叫，就很烦。屏蔽之后整个世界都好起来了&lt;/li&gt;
&lt;li&gt;DynamicSurroundings 与 Animania 有 bug，对 Animania 的某些特有生物进行交互时会触发找不到特定媒体资源的 bug，导致游戏崩溃，重新进入又会触发这个 bug，只有在进去的一瞬间用指令将玩家杀死才能勉强逃离这个无尽的循环（血泪的教训）（最新版本已修复）&lt;/li&gt;
&lt;li&gt;Animania 会对每个维度的世界进行注入，比较耗费资源。在同时安装虚无世界 AoA 的情况下，每次服务器启动 Animania 需要对其包含的二十多的世界维度进行注入，严重拖慢启动速度&lt;/li&gt;
&lt;li&gt;Quark 模组对 1.12 的 MC 只有 1.6 版本而没有后续版本的内容更新和 bug 修复。实际使用中有点吃性能&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;h2 id=&#34;mc-服务器优化&#34;&gt;MC 服务器优化&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;我使用的是 SpongeForge，因此只对一些通用的优化手段和原版服务器的一些参数做介绍。使用 Spigot 等的可以参考 MCBBS 的帖子进行更加深入的调优：&lt;/p&gt;

&lt;p&gt;Minecraft 服务器优化教程 —— 让多带 50% 的玩家不再是梦 - 联机教程 - Minecraft(我的世界) 中文论坛
&lt;a href=&#34;https://www.mcbbs.net/forum.php?mod=viewthread&amp;amp;tid=478126&#34;&gt;https://www.mcbbs.net/forum.php?mod=viewthread&amp;amp;tid=478126&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;对于一台长期运行的 MC 服务器，我们需要关注的主要是下面几点&lt;/p&gt;

&lt;h3 id=&#34;1-稳定性&#34;&gt;1. 稳定性&lt;/h3&gt;

&lt;p&gt;要保证服务的稳定，我们需要防范的是&lt;strong&gt;内在的崩溃&lt;/strong&gt;和&lt;strong&gt;外在的影响&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;防止服务端程序自己崩溃&lt;/strong&gt;的方法有：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;尽量使用稳定版的 MC 和稳定版的 Forge&lt;/li&gt;
&lt;li&gt;避免使用评分较低的 Mod&lt;/li&gt;
&lt;li&gt;加载大量 Mod 前先在本地做好测试，避免冲突，同时保障所有依赖项已安装好&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;避免外在影响致 MC 服务器崩溃&lt;/strong&gt;的方法有：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;为 JVM 设置合适的内存限制，避免因&lt;code&gt;OutOfMemory&lt;/code&gt;导致 MC 服务端进程被系统杀掉&lt;/li&gt;
&lt;li&gt;开放的服务器最好限制下权限并封堵一些游戏内的漏洞，避免熊孩子炸服&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;2-可维护性&#34;&gt;2. 可维护性&lt;/h3&gt;

&lt;p&gt;这一项的话其实见仁见智，有些人可能只会开个服务器玩几个星期，有些人会开几年。如果只是短期玩的话麻烦点就麻烦点咯，但是要长期玩的话，注意一下服务器的可维护性后面可以减少很多时间和精力。&lt;/p&gt;

&lt;p&gt;我的建议有以下几点：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;使用 Docker&lt;/strong&gt;。这样可以方便地进行服务的停启与迁移、升级。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;使用 Docker-Compose&lt;/strong&gt;并保存&lt;code&gt;docker-coompose.yml&lt;/code&gt;文件，这样你可以方便地更改一些参数而不用每次都输入一串长长的&lt;code&gt;docker run&lt;/code&gt;指令。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;经常备份&lt;/strong&gt;。数据无价。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;尽量避免使用已经停止维护的 Mod&lt;/strong&gt;。到时候要是出了奇怪的 Bug，你就只能含泪把这个 Mod 所有相关的内容从你的世界剥离。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;3-响应及时性&#34;&gt;3. 响应及时性&lt;/h3&gt;

&lt;p&gt;响应及时性也体现在几个方面：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU 运算能力够强，复杂的时间（战斗、爆炸）等能很快地处理过来&lt;/li&gt;
&lt;li&gt;存储设备 IO 速度快，服务启动、区块加载可以非常迅速&lt;/li&gt;
&lt;li&gt;网络连接稳定、延迟低，波动小&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;上面三点可以通过堆硬件来实现。不过有没有不辛苦钱包又能提高游戏体验的方法呢？&lt;/p&gt;

&lt;p&gt;自然是有的。我们可以通过修改服务端程序的部分配置来实现。不过本质上是牺牲一小部分游戏体验换取一大部分游戏体验，就看你能忍受的牺牲的部分能有多少咯。&lt;/p&gt;

&lt;p&gt;MC 服务器的优化主要聚焦在两个地方&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;MC 服务端程序的参数优化&lt;/li&gt;
&lt;li&gt;JVM 参数调优&lt;/li&gt;
&lt;/ol&gt;

&lt;h4 id=&#34;mc-服务端优化&#34;&gt;MC 服务端优化&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;VIEW_DISTANCE: 8&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;这一项可以更改加载的&lt;strong&gt;区块&lt;/strong&gt;的数量。这个数值越大，就会加载更多的区块，占用的内存和 CPU 就会更多。这个数值过小可能会导致你家的作物不长以及怪物刷不出来，会显著影响游戏体验。减小这一项的数值可以显著减少内存和 CPU 占用。&lt;/p&gt;

&lt;p&gt;默认值 10，建议值 4~8。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：1 个&lt;strong&gt;&lt;em&gt;区块&lt;/em&gt;&lt;/strong&gt;并不是指一个方块，而是指一个&lt;code&gt;16*16&lt;/code&gt;的区域。这个数值对可视区域的影响并不会很大，你可以放心地减小这个数值。这一项的值每减小 1，你的服务器每次就可以少计算​&lt;code&gt;16*16*256&lt;/code&gt;个方块&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;NETWORK_COMPRESSION_THRESHOLD: 512&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;这一项的含义是对大于特定大小的数据包进行压缩。压缩会消耗一定量的 CPU 资源，不过可以减缓网络的压力。如果你的网络条件较差，可以减小这一项的数值。&lt;/p&gt;

&lt;p&gt;默认值：256&lt;/p&gt;

&lt;h4 id=&#34;jvm-调优&#34;&gt;JVM 调优&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;首先需要声明的是，我不是 JVM 调参专业户，下文的数据也并不是严格的评测。结论并不严谨，仅仅从一个技术人员的视角出发，结合我实际的使用体验，给出的一些建议，供大家参考。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5 id=&#34;当我们在讨论-jvm-调优时-我们在谈论什么&#34;&gt;当我们在讨论 JVM 调优时，我们在谈论什么？&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;垃圾回收&lt;/strong&gt;（&lt;strong&gt;G&lt;/strong&gt;arbage &lt;strong&gt;C&lt;/strong&gt;ollection）一直以来都是众多 JVM 调优教程的核心所在。Java 运行于 VM 上，运行过程中不可避免的垃圾回收是最影响应用整体性能的存在。&lt;/p&gt;

&lt;p&gt;这里我们不去纠结那些新生代、老年代的划分、各种比率、各种单元的大小，我们只需要明白几点：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;不要觉得你比 JVM 的开发人员牛 X&lt;/li&gt;
&lt;li&gt;不要觉得网上各路 JVM 调参大神的方法就适用于你&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;众多顶级公司都在使用 Java，其母公司 Oracle 自然会招聘全球最优秀的一批开发人员去开发，所以&lt;strong&gt;JVM 的大部分设置都是开箱即用的，默认最佳的。&lt;/strong&gt;在你不了解某一项参数的含义、不知道更改某一项配置的目的时，最好是不要做改动。&lt;/p&gt;

&lt;p&gt;其次，网络上大部分 JVM 的调优教程都是应对“面试造火箭”的，即便是以实际应用为主的 JVM 优化教程，人家那都是几十核几百 G 内存的机器，一秒钟要承担几百万的访问量，他们做优化的出发点、目标都&lt;strong&gt;不一定适用于你。&lt;/strong&gt;&lt;/p&gt;

&lt;h5 id=&#34;明确优化目标&#34;&gt;明确优化目标&lt;/h5&gt;

&lt;p&gt;明确了上面两点我们可以开始着手进行优化了。&lt;/p&gt;

&lt;p&gt;首先需要明确你开 MC 服务器的机器是什么配置。以我的为例，我使用的是腾讯云的&lt;strong&gt;1 核 2G 的云服务器&lt;/strong&gt;，&lt;strong&gt;带宽 2M&lt;/strong&gt;，即峰值速度为 256k/s。&lt;/p&gt;

&lt;p&gt;其次需要知道你的优化目标。网络上大多数 JVM 的优化教程都是追求更低的响应时间，以便能够承载更多的并发访问。&lt;/p&gt;

&lt;p&gt;以我的情况为例：我开这个 MC 服务器的目的，只是希望能够与&lt;strong&gt;不超过 5 个好友&lt;/strong&gt;联机，玩带一些暮色森林这样的&lt;strong&gt;Mod&lt;/strong&gt;的 MC。&lt;/p&gt;

&lt;p&gt;搭建完服务器后，观察了了一段时间后发现，&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;只有在 MC 服务器刚启动的时候 CPU 占用率会达到 100%，空载（没有玩家在线，后台没有高负荷任务）只有 2% 左右，两人联机时 CPU 平均负载在 30% 左右。&lt;/li&gt;
&lt;li&gt;加装了十几个 Mod 的情况下，空载占用 CPU 资源在 1G 左右，两人联机 1.4G 左右。&lt;/li&gt;
&lt;li&gt;只有在客户端刚进入的时候会跑满带宽，之后正常游戏时，每台客户端需要占用 10K/s 左右的带宽。&lt;/li&gt;
&lt;li&gt;联机游戏间或卡顿，但很快恢复&lt;/li&gt;
&lt;li&gt;查看日志发现空载时时竟然仍会&lt;code&gt;can&#39;t keep up&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205922.png&#34; alt=&#34;服务器在空载&#34; /&gt;&lt;/p&gt;

&lt;p&gt;那么以我的情况来看&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU 性能富余&lt;/li&gt;
&lt;li&gt;内存吃紧&lt;/li&gt;
&lt;li&gt;带宽够用&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;那么&lt;strong&gt;我的优化目标&lt;/strong&gt;就是：利用好 CPU 资源，尽力减少内存占用，以便为其他程序让路，并且为未来可能要添加的新 Mod 留出空间。&lt;/p&gt;

&lt;h5 id=&#34;优化&#34;&gt;优化&lt;/h5&gt;

&lt;p&gt;JVM 优化的大头是 GC。网上吹的漫天飞的 G1GC 的确有他的可取之处，一些腐竹的测试数据也表明其实际效果优秀。但是在我的案例中，使用 G1GC 是有问题的：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;G1GC 天生是为了现代互联网应用环境而设计的&lt;/strong&gt;，需要开很多个线程协同来完成垃圾回收工作。他适用于多核处理器 + 大内存机器上的高负荷运算。而我的服务器是单核，内存也并不富裕。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多线程的 GC 模式跑在单核机器上&lt;/strong&gt;时出现的问题就是：单核机器无法并行处理多个任务，其本质上只是在多个任务之间快速切换，来实现各个任务基本“实时”“并行”运行。但是线程之间的切换是有代价的，&lt;strong&gt;性能损耗积少成多&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;G1GC 追求在延迟可控的情况下达到更高的吞吐量&lt;/strong&gt;。但他的&lt;strong&gt;代价是&lt;a href=&#34;https://segmentfault.com/q/1010000021658061&#34;&gt;更多的内存占用&lt;/a&gt;。&lt;/strong&gt;小内存机器并不适合使用 G1GC。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;物色了一番，我最终选择换用 Serial GC 代替原本的 G1GC。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Serial（-XX:+UseSerialGC）&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;从名字我们可以看出，这是一个串行收集器。&lt;/p&gt;

&lt;p&gt;Serial 收集器是 Java 虚拟机中最基本、历史最悠久的收集器。在 JDK1.3 之前是 Java 虚拟机新生代收集器的唯一选择。目前也是 ClientVM、ServerVM 4 核 4GB 以下机器默认垃圾回收器。Serial 收集器并不是只能使用一个 CPU 进行收集，而是当 JVM 需要进行垃圾回收的时候，需暂停所有的用户线程，直到回收结束。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5 id=&#34;优化前后对比&#34;&gt;优化前后对比&lt;/h5&gt;

&lt;ol&gt;
&lt;li&gt;优化前 MC 服务器的资源占用情况&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205932.jpg&#34; alt=&#34;360 截图 20210129163301881&#34; /&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;SERIAL GC (1 ONLINE)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205936.png&#34; alt=&#34;image-20210202194034351&#34; /&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;进一步对 mod 优化后，2 online&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205939.png&#34; alt=&#34;image-20210202221554906&#34; /&gt;&lt;/p&gt;

&lt;h5 id=&#34;其他优化方法&#34;&gt;其他优化方法&lt;/h5&gt;

&lt;p&gt;更换 GC 只是众多优化方法中的一种，其他的诸如换用 OpenJ9 虚拟机也可以有不错的效果，可惜的是 Forge 对其的支持并不友好，只得作罢。还有启用指针压缩也可以获得不错的性能提升，不过 JDK6_u23 之后 &lt;code&gt;UseCompressedOops&lt;/code&gt; 就已经被默认启用了，使用新版本 Java 基本不用关注这方面的优化了。&lt;/p&gt;

&lt;h2 id=&#34;写在最后&#34;&gt;写在最后&lt;/h2&gt;

&lt;p&gt;晒几张图&lt;/p&gt;

&lt;p&gt;我家：&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205942.png&#34; alt=&#34;屏幕截图 (13)&#34; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205946.png&#34; alt=&#34;屏幕截图 (16)&#34; /&gt;&lt;/p&gt;

&lt;p&gt;我安装的光影 Sildurs Vibrant Shaders v1.281 High 效果图&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205949.png&#34; alt=&#34;屏幕截图 (12)&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Better HUD + 旅行地图效果图&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205953.png&#34; alt=&#34;屏幕截图 (17)&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;参考-推荐阅读&#34;&gt;参考&amp;amp;推荐阅读&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;大家最推荐用哪种联机方式玩 Minecraft？ - 知乎
&lt;a href=&#34;https://www.zhihu.com/question/54048310&#34;&gt;https://www.zhihu.com/question/54048310&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;View Distance: optimize your Minecraft server
&lt;a href=&#34;https://mtxserv.com/article/12535/view_distance_optimize_your_minecraft_server&#34;&gt;https://mtxserv.com/article/12535/view_distance_optimize_your_minecraft_server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Minecraft 服务器优化教程 —— 让多带 50% 的玩家不再是梦 - 联机教程 - Minecraft(我的世界) 中文论坛
&lt;a href=&#34;https://www.mcbbs.net/forum.php?mod=viewthread&amp;amp;tid=478126&#34;&gt;https://www.mcbbs.net/forum.php?mod=viewthread&amp;amp;tid=478126&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;itzg/docker-minecraft-server: Docker image that provides a Minecraft Server that will automatically download selected version at startup
&lt;a href=&#34;https://github.com/itzg/docker-minecraft-server&#34;&gt;https://github.com/itzg/docker-minecraft-server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;jvm G1 垃圾收集器有什么缺点？ - SegmentFault 思否
&lt;a href=&#34;https://segmentfault.com/q/1010000021658061&#34;&gt;https://segmentfault.com/q/1010000021658061&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

        
        </description>
    </item>
    
    <item>
      <title>Mac 平台配置 C/Python/Java 学习环境</title>
      <link>/posts/mac%E5%B9%B3%E5%8F%B0%E9%85%8D%E7%BD%AE%E5%AD%A6%E4%B9%A0%E7%8E%AF%E5%A2%83/</link>
      <pubDate>Fri, 18 Dec 2020 00:00:00 +0000</pubDate>
      
      <guid>/posts/mac%E5%B9%B3%E5%8F%B0%E9%85%8D%E7%BD%AE%E5%AD%A6%E4%B9%A0%E7%8E%AF%E5%A2%83/</guid>
      <description>
        
          
          
          
        
        
        

&lt;!-- # Mac 平台配置 C/Python/Java 学习环境 --&gt;

&lt;blockquote&gt;
&lt;p&gt;本系列教程旨在为刚入门的编程语言学习者做好指南工作，开始编码，本应很简单&lt;/p&gt;

&lt;p&gt;The PAINLESS way to start coding!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&#34;配置-c-语言环境&#34;&gt;配置 C 语言环境&lt;/h2&gt;

&lt;p&gt;下面以 clang+VSCode+CodeRunner 为例，搭建一个简单的 C 语言学习环境。&lt;/p&gt;

&lt;h3 id=&#34;检查编译器支持&#34;&gt;检查编译器支持&lt;/h3&gt;

&lt;p&gt;C 语言的编译需要编译器，一般可以选择 gcc 或是 clang。Mac 系统默认安装了 clang 同时兼容了 gcc 的指令。在终端中进行查看：&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015258.png&#34; alt=&#34;screenshot&#34; /&gt;&lt;/p&gt;

&lt;p&gt;输入&lt;code&gt;gcc -v&lt;/code&gt;指令测试 gcc 命令是否可用并查看其版本，由上图输出可以看到，该命令可用，版本信息显示的则是 clang 的信息。一般来说，刚学习 C 语言无需关注两者的异同。&lt;/p&gt;

&lt;h3 id=&#34;配置-vscode&#34;&gt;配置 VSCode&lt;/h3&gt;

&lt;p&gt;&lt;span id=&#34;vscode&#34;&gt;VSCode&lt;/span&gt;是由微软主导开发的一款开源免费、轻巧简单、功能强大的代码编辑器。配合各式各样的插件可以方便地实现各种你想得到和你想不到的功能。&lt;/p&gt;

&lt;p&gt;前往&lt;a href=&#34;https://code.visualstudio.com/&#34;&gt;VSCode 官网&lt;/a&gt;下载 Mac 版 VScode。并按照安装程序的指引进行安装。&lt;/p&gt;

&lt;p&gt;如果下载速度太慢，可以参考&lt;a href=&#34;https://zhuanlan.zhihu.com/p/112215618&#34;&gt;这篇文章&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015416.png&#34; alt=&#34;截屏 2020-12-18 22.20.00&#34; /&gt;&lt;/p&gt;

&lt;p&gt;安装完毕后，打开会看到如下图所示的界面。默认界面为英文，下面对其进行汉化并安装一些必要的插件。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015546.png&#34; alt=&#34;截屏 2020-12-18 22.21.59&#34; /&gt;&lt;/p&gt;

&lt;p&gt;单击方形图标，打开扩展面板。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015621.png&#34; alt=&#34;image-20201218223234296&#34; style=&#34;zoom:50%;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;搜索&lt;code&gt;chinese&lt;/code&gt;安装汉化插件。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015622.png&#34; alt=&#34;image-20201218222747511&#34; /&gt;&lt;/p&gt;

&lt;p&gt;搜索&lt;code&gt;code runner&lt;/code&gt;安装 Code Runner 插件。并按指示重启应用（Reload 字样）&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015620.png&#34; alt=&#34;image-20201218222511011&#34; style=&#34;zoom:50%;&#34; /&gt;（截图中因为本地已安装故只显示了 Uninstall 卸载按钮。未安装的情况下会显示 Install 按钮可点击安装）&lt;/p&gt;

&lt;p&gt;其他插件可根据需要安装。此处推荐安装 C/C++ 插件以实现 C 代码的高亮和补全等功能。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015624.png&#34; alt=&#34;image-20201218223432859&#34; style=&#34;zoom:50%;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;重启后进入应用，界面自动切换到中文。再点击扩展图标，展开扩展列表，在已安装扩展中找到&lt;strong&gt;Code Runner&lt;/strong&gt;，点击齿轮图标展开菜单，点击进入扩展设置。&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015627.png&#34; alt=&#34;image-20201218224215676&#34; style=&#34;zoom:50%;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;在输入栏中，在当前选项卡为&lt;strong&gt;用户&lt;/strong&gt;的情况下，输入&lt;code&gt;run&lt;/code&gt;并按回车进行搜索。修改&lt;code&gt;Run in Terminal&lt;/code&gt;和 &lt;code&gt;Save File Before Run&lt;/code&gt;的设置项。&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015626.png&#34; alt=&#34;image-20201218224059150&#34; style=&#34;zoom:50%;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;完成了上述的设置，我们就可以来编写 C 语言的程序了。&lt;/p&gt;

&lt;h3 id=&#34;hello-c&#34;&gt;Hello，C！&lt;/h3&gt;

&lt;p&gt;点击左侧第一个按钮，来到文件管理面板。点击打开文件夹按钮，打开一个空白的文件夹（任意文件夹都可以，只是保存你代码的地方，一般一个干净整洁的新文件夹为宜）&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015623.png&#34; alt=&#34;image-20201218230901008&#34; style=&#34;zoom:50%;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;打开文件夹后，在空白处单击右键，新建一个文件，文件名输入为&lt;code&gt;hello.c&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015629.png&#34; alt=&#34;image-20201218224536077&#34; style=&#34;zoom:50%;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;键入代码。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015628.png&#34; alt=&#34;image-20201218224343393&#34; /&gt;&lt;/p&gt;

&lt;p&gt;点击右上角的三角形按钮即可自动编译运行你的 C 语言代码。在窗口下方的终端即可看到输出的&lt;code&gt;Hello,C!&lt;/code&gt;字样。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219021631.png&#34; alt=&#34;image-20201219021624927&#34; /&gt;&lt;/p&gt;

&lt;h3 id=&#34;完成&#34;&gt;完成✅&lt;/h3&gt;

&lt;p&gt;现在，开始你的 C 语言学习之旅吧！&lt;/p&gt;

&lt;h2 id=&#34;配置-python-语言学习环境&#34;&gt;配置 Python 语言学习环境&lt;/h2&gt;

&lt;h3 id=&#34;检查-python-环境&#34;&gt;检查 Python 环境&lt;/h3&gt;

&lt;p&gt;Mac 系统会自带有 Python 环境。在终端中输入 python 并回车。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015630.png&#34; alt=&#34;截屏 2020-12-18 22.54.54&#34; /&gt;&lt;/p&gt;

&lt;p&gt;可以看到系统已经安装有 Python，但是显示版本为 2.7。现在的主流版本是 Python3，Python2 与 Python3 的语法并不兼容。&lt;/p&gt;

&lt;p&gt;在&lt;code&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;后面键入&lt;code&gt;exit()&lt;/code&gt;退出 python2 的交互程序。再次在终端输入&lt;code&gt;python3&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015634.png&#34; alt=&#34;image-20201218231954777&#34; /&gt;&lt;/p&gt;

&lt;p&gt;此时显示的版本为 3.8.6。&lt;/p&gt;

&lt;h3 id=&#34;hello-python&#34;&gt;Hello, Python!&lt;/h3&gt;

&lt;p&gt;在交互式命令行界面，我们可以直接输入 python 语句并执行。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219021016.png&#34; alt=&#34;截屏 2020-12-18 23.00.54&#34; /&gt;&lt;/p&gt;

&lt;p&gt;一句一句地输入代码再执行显然太低效了。我们需要一个趁手的代码编辑器。&lt;/p&gt;

&lt;p&gt;下面以 VSCode 为例。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VSCode 的下载和基本配置&lt;/strong&gt;请参考上文 C 语言环境配置中 VSCode 的配置环节。&lt;/p&gt;

&lt;p&gt;完成基本的设置后，来安装 Python 的专属插件，以实现 Python 代码的高亮、补全等功能。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015633.png&#34; alt=&#34;image-20201218230442930&#34; /&gt;&lt;/p&gt;

&lt;p&gt;点击左侧第一个按钮，来到文件管理面板。点击打开文件夹按钮，打开一个空白的文件夹（任意文件夹都可以，只是保存你代码的地方，一般一个干净整洁的新文件夹为宜）&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015623.png&#34; alt=&#34;image-20201218230901008&#34; style=&#34;zoom:50%;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;打开文件夹后，在空白处单击右键，新建一个文件，文件名输入为&lt;code&gt;hello.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015629.png&#34; alt=&#34;image-20201218224536077&#34; style=&#34;zoom:50%;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;键入代码。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015631.png&#34; alt=&#34;截屏 2020-12-18 22.58.44&#34; /&gt;&lt;/p&gt;

&lt;p&gt;点击右上角的三角形按钮开始运行我们编写的代码&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015632.png&#34; alt=&#34;截屏 2020-12-18 23.00.54&#34; /&gt;&lt;/p&gt;

&lt;p&gt;可以看到，窗口下方的终端中已经出现了&lt;code&gt;Hello,Python!&lt;/code&gt;字样。代码运行成功。&lt;/p&gt;

&lt;h3 id=&#34;完成-1&#34;&gt;完成✅&lt;/h3&gt;

&lt;p&gt;现在，开始你的 Python 语言学习之旅吧！&lt;/p&gt;

&lt;h2 id=&#34;配置-java-语言学习环境&#34;&gt;配置 Java 语言学习环境&lt;/h2&gt;

&lt;h3 id=&#34;安装-jdk&#34;&gt;安装 JDK&lt;/h3&gt;

&lt;p&gt;Mac OS 并没有内置 Java 语言的支持，需要我们另外安装。&lt;/p&gt;

&lt;p&gt;直接在终端输入&lt;code&gt;java&lt;/code&gt;，系统会提示 Java 未安装并跳转到 Oracle 官方的下载页面。在官网下载会强制要求你注册并登陆 Oracle 账户，网站连接缓慢且步骤繁琐。此处我们到清华大学的 TUNA 开源软件镜像站下载相关软件。&lt;/p&gt;

&lt;p&gt;首先到 TUNA 开源软件镜像站，来到&lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/&#34;&gt;AdoptOpenJDK 的下载页面&lt;/a&gt;。在列表中找到你需要的版本，点击进入后依次选择处理器架构和平台。&lt;/p&gt;

&lt;p&gt;此处以 Java 11 为例，其 Mac OS 下安装程序的下载地址为&lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/11/jdk/x64/mac/OpenJDK11U-jdk_x64_mac_hotspot_11.0.9.1_1.pkg&#34;&gt;https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/11/jdk/x64/mac/OpenJDK11U-jdk_x64_mac_hotspot_11.0.9.1_1.pkg&lt;/a&gt;。需要其他版本的也可以自行选择。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;自行选择时请注意：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;jre 只是 java 运行环境，并不包括对 java 代码的编译功能。下载时请认准&lt;strong&gt;jdk&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;选择处理器架构时，传统 Intel 内核 Mac 请选择&lt;strong&gt;x86&lt;/strong&gt;，对于 M1 内核的 Mac，截止本文写作，暂无相关支持，请关注后续更新。&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;最内层下载资源的列表中，jdk 的资源文件名会有&lt;code&gt;hotspot&lt;/code&gt;和 &lt;code&gt;openj9&lt;/code&gt;两种字样。Java 入门请选择&lt;code&gt;hotspot&lt;/code&gt;，文件后缀名请选择&lt;code&gt;.pkg&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;下载完成后点击打开，出现如下的安装界面。根据指引完成安装。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015635.png&#34; alt=&#34;image-20201218232011039&#34; /&gt;&lt;/p&gt;

&lt;p&gt;安装完成后，在终端中输入&lt;code&gt;java -version&lt;/code&gt;并回车确认。看到如下输出说明已经正确安装且 Java 的版本为&lt;code&gt;11.0.9.1&lt;/code&gt;即 Java 11.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015640.png&#34; alt=&#34;image-20201218235233365&#34; /&gt;&lt;/p&gt;

&lt;p&gt;下面来为 Java 的学习配置一个趁手的代码编辑器，以 VSCode 为例。&lt;/p&gt;

&lt;h3 id=&#34;为-java-语言学习配置-vscode&#34;&gt;为 Java 语言学习配置 VSCode&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;VSCode 的下载和基本配置&lt;/strong&gt;请参考上文 C 语言环境配置中 VSCode 的配置环节。&lt;/p&gt;

&lt;p&gt;完成基本的设置后，来安装 Java 的专属插件，以实现 Java 代码的高亮、补全等功能。&lt;/p&gt;

&lt;p&gt;在左侧扩展面板的搜索栏中搜索&lt;code&gt;java&lt;/code&gt;，选择&lt;code&gt;Language Support for Java&lt;/code&gt;并安装。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015641.png&#34; alt=&#34;image-20201218235514041&#34; style=&#34;zoom:50%;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;点击左侧第一个按钮，来到文件管理面板。点击打开文件夹按钮，打开一个空白的文件夹（任意文件夹都可以，只是保存你代码的地方，一般一个干净整洁的新文件夹为宜）&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015623.png&#34; alt=&#34;image-20201218230901008&#34; style=&#34;zoom:50%;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;打开文件夹后，在空白处单击右键，新建一个文件，文件名输入为&lt;code&gt;hello.java&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015629.png&#34; alt=&#34;image-20201218224536077&#34; style=&#34;zoom:50%;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;键入代码。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015639.png&#34; alt=&#34;image-20201218235213233&#34; /&gt;&lt;/p&gt;

&lt;p&gt;可以看到，在窗口下方的终端面板中，已经成功出现了&lt;strong&gt;Hello, Java!&lt;/strong&gt;字样，代码运行成功。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015637.png&#34; alt=&#34;截屏 2020-12-19 00.05.33&#34; /&gt;&lt;/p&gt;

&lt;h3 id=&#34;完成-2&#34;&gt;完成✅&lt;/h3&gt;

&lt;p&gt;至此，Mac 平台下的 Java 语言学习环境配置完毕，开始你的 Java 学习之旅吧！&lt;/p&gt;

&lt;h2 id=&#34;常见问题&#34;&gt;常见问题&lt;/h2&gt;

&lt;h3 id=&#34;1-java-扩展安装弹出提示-jdk-版本过低&#34;&gt;1. Java 扩展安装弹出提示 JDK 版本过低&lt;/h3&gt;

&lt;p&gt;&lt;img src=&#34;https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015638.png&#34; alt=&#34;image-20201218234917588&#34; style=&#34;zoom:50%;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;这是因为插件内置的一些功能需要 Java 来运行，而这些功能又依赖于一些较新的特性，这些特性最早出现在 Java 11 中。为了更好地学习和使用 Java，这里推荐安装 Java 11 或 Java 12。网站教程或学校授课常常以 Java 8 为例，但对于初学者来说，几者无太大区别，Java 8 的代码都可以被很好地支持。&lt;/p&gt;

        
        </description>
    </item>
    
  </channel>
</rss>