<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Ami&#39;s Endlife Project</title>
  
  <subtitle>End is already ended.</subtitle>
  <link href="https://endlife.1l1.icu/atom.xml" rel="self"/>
  
  <link href="https://endlife.1l1.icu/"/>
  <updated>2024-08-30T23:38:29.795Z</updated>
  <id>https://endlife.1l1.icu/</id>
  
  <author>
    <name>Endlife</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>About This Site</title>
    <link href="https://endlife.1l1.icu/2024/08/30/About-This-Site/"/>
    <id>https://endlife.1l1.icu/2024/08/30/About-This-Site/</id>
    <published>2024-08-30T23:32:29.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>这是一个纪念站点。</p><p>只是一些过去的文章，这些东西早已死去。<br>与其说这是一个网站，或许更像是一个墓碑。</p><p>曾经的一切，早已失去了色彩，没关系了。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;这是一个纪念站点。&lt;/p&gt;
&lt;p&gt;只是一些过去的文章，这些东西早已死去。&lt;br&gt;与其说这是一个网站，或许更像是一个墓碑。&lt;/p&gt;
&lt;p&gt;曾经的一切，早已失去了色彩，没关系了。&lt;/p&gt;
</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>最具潜力的Frp，即将成为圈内传奇！【风林水起Frp】</title>
    <link href="https://endlife.1l1.icu/2023/07/29/%E6%9C%80%E5%85%B7%E6%BD%9C%E5%8A%9B%E7%9A%84Frp%EF%BC%8C%E5%8D%B3%E5%B0%86%E6%88%90%E4%B8%BA%E5%9C%88%E5%86%85%E4%BC%A0%E5%A5%87%EF%BC%81%E3%80%90%E9%A3%8E%E6%9E%97%E6%B0%B4%E8%B5%B7Frp%E3%80%91/"/>
    <id>https://endlife.1l1.icu/2023/07/29/%E6%9C%80%E5%85%B7%E6%BD%9C%E5%8A%9B%E7%9A%84Frp%EF%BC%8C%E5%8D%B3%E5%B0%86%E6%88%90%E4%B8%BA%E5%9C%88%E5%86%85%E4%BC%A0%E5%A5%87%EF%BC%81%E3%80%90%E9%A3%8E%E6%9E%97%E6%B0%B4%E8%B5%B7Frp%E3%80%91/</id>
    <published>2023-07-29T14:42:28.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>视频请直接看 @云墨安 的视频：</p><iframe src="//player.bilibili.com/player.html?aid=274055120&bvid=BV1Cc411F7pW&cid=1214857081&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe><p>你说的对，但是《风林水起Frp》是由 FLSQ团队 自主研发的一款全新 Frp。游戏发生在一个被称作「 互联网 」的幻想世界，在这里，被 15元一个月 选中的人将被授予「 100Mbps带宽 」，导引 流量 之力。你将扮演一位名为「 用户 」的神秘角色，在自由的旅行中邂逅性格各异、能力独特的 FLSQ团队成员 们，和他们 共同使用风林水起Frp ——同时，逐步发掘「 TXT数据传输与500M上行 」的真相。​</p><h2 id="文字介绍"><a href="#文字介绍" class="headerlink" title="文字介绍"></a>文字介绍</h2><p>这是一个由 FLSQ（风林水起）团队所建立的一个Frp，其包含免费节点和大量的付费节点。<br>在这里，你将发现1M超高带宽的世界领先节点，同时，还能找到大量优质付费节点，全部都是“群相册扫码支付15元然后联系群主或者柠檬”就可以使用的。</p><p>该Frp全部采用原版Frp，避免了友商长期以来节点稳定不掉线的问题，提高了Frp的使用体验。</p><p>同时，还采用了使用自家Frp穿透自己服务器的API，避免了API和Frp其中一个掉线就不能用的问题，以及启动隧道就返回404 Not Found的长期诟病。此外，该Frp采用TXT方式传输节点信息，有效避免了代码中包含如JSON,XML,TOML等配置文件解析器，减小了客户端体积，优化了用户体验。</p><p>另外，你还能在QQ群中发现有趣的事情，比如进群两三个人就发一条商业广告，有效的获得了新用户的信赖，同时推销云上产品。据透露，该团队已经完成了160单的出色成绩，这在全世界来说都是无法匹敌的。</p><p>以上就是关于风林水起Frp的全部内容，感兴趣的小伙伴可以自行尝逝。</p><h2 id="附"><a href="#附" class="headerlink" title="附"></a>附</h2><p><a href="https://www.gov.cn/govweb/fwxx/bw/spypjgj/content_505656.htm">中华人民共和国广告法</a></p><blockquote><p>第七条　广告内容应当有利于人民的身心健康，促进商品和服务质量的提高，保护消费者合法权益，遵守社会公告和职业首先，维护国家的尊严和利益。广告不得有下列情形：</p><p>    （一）使用中华人民共和国国旗、国徽、国歌；<br>    <br>    （二）使用国家机关和国家机关工作人员的名义；</p><p>    <strong>（三）使用国家级、最高级、最佳等用语；</strong></p><p>    （四）妨碍社会安定和危害人身、财产安全，损害社会公共利益。</p><p>    （五）妨碍社会公共秩序和违背社会良好风尚；</p><p>    （六）含有淫秽、迷信、恐怖、暴力、丑恶的内容；</p><p>    （七）含有民族、种族、宗教、性别歧视的内容；</p><p>    （八）妨碍环境和自然资源保护；</p><p>    （九）法律、行政法规规定禁止的其他情形。</p></blockquote><p class='item-img' data-src='https://pan.1l1.icu/f/WYGFq/Screenshot_20230127_001538_tv.danmaku.bili_edit_86754238775303.jpg'><img src="https://pan.1l1.icu/f/WYGFq/Screenshot_20230127_001538_tv.danmaku.bili_edit_86754238775303.jpg"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;视频请直接看 @云墨安 的视频：&lt;/p&gt;
&lt;iframe src=&quot;//player.bilibili.com/player.html?aid=274055120&amp;bvid=BV1Cc411F7pW&amp;cid=1214857081&amp;page=1&quot; scrolling=&quot;no&quot;</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>2023-07-06记事</title>
    <link href="https://endlife.1l1.icu/2023/07/03/2023-07-06%E8%AE%B0%E4%BA%8B/"/>
    <id>https://endlife.1l1.icu/2023/07/03/2023-07-06%E8%AE%B0%E4%BA%8B/</id>
    <published>2023-07-03T14:08:29.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>很久没写Blog了，今天想起来就写一下吧。<br>这是一个没有任何排序的记事。</p><h2 id="Who-is-me？"><a href="#Who-is-me？" class="headerlink" title="Who is me？"></a>Who is me？</h2><p>我究竟是谁？明明向往的事情真正如愿，但却一股空虚感从深渊之中赶赴而来……<br>这是人性吗……</p><h2 id="一定是疯了吧"><a href="#一定是疯了吧" class="headerlink" title="一定是疯了吧"></a>一定是疯了吧</h2><p>明明把自己的生活规划的如此细致，但却永远无法实现自己的计划，或者说，根本做不到啊……</p><h2 id="今天又是咕咕咕的一天"><a href="#今天又是咕咕咕的一天" class="headerlink" title="今天又是咕咕咕的一天"></a>今天又是咕咕咕的一天</h2><p>今天咕了 「青镜」| ╭映水╯ | ◤月莹◢<br>CatSero终于是写出了v3，但是明天还得更新<br>说要给Minecraft服务器发宣传片，但是已经咕了3天</p><h2 id="怎么能让自己摆脱内向呢……"><a href="#怎么能让自己摆脱内向呢……" class="headerlink" title="怎么能让自己摆脱内向呢……"></a>怎么能让自己摆脱内向呢……</h2><p>很奇怪哎，在网上如此活跃的我在现实居然是个内向无比的NT（</p><h2 id="又没看到Vue-js的书"><a href="#又没看到Vue-js的书" class="headerlink" title="又没看到Vue.js的书"></a>又没看到Vue.js的书</h2><p>懒了</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;很久没写Blog了，今天想起来就写一下吧。&lt;br&gt;这是一个没有任何排序的记事。&lt;/p&gt;
&lt;h2 id=&quot;Who-is-me？&quot;&gt;&lt;a href=&quot;#Who-is-me？&quot; class=&quot;headerlink&quot; title=&quot;Who is me？&quot;&gt;&lt;/a&gt;Who is me</summary>
      
    
    
    
    
    <category term="日记" scheme="https://endlife.1l1.icu/tags/%E6%97%A5%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>图床暂时寄喽</title>
    <link href="https://endlife.1l1.icu/2023/05/03/%E5%9B%BE%E5%BA%8A%E6%9A%82%E6%97%B6%E5%AF%84%E5%96%BD/"/>
    <id>https://endlife.1l1.icu/2023/05/03/%E5%9B%BE%E5%BA%8A%E6%9A%82%E6%97%B6%E5%AF%84%E5%96%BD/</id>
    <published>2023-05-03T02:48:00.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>由于未知原因，本站图床直链跨域全部403，届时部分图片将无法访问，我也懒得修了，所以看着办（</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;由于未知原因，本站图床直链跨域全部403，届时部分图片将无法访问，我也懒得修了，所以看着办（&lt;/p&gt;
</summary>
      
    
    
    
    
    <category term="服务" scheme="https://endlife.1l1.icu/tags/%E6%9C%8D%E5%8A%A1/"/>
    
  </entry>
  
  <entry>
    <title>花火的小家</title>
    <link href="https://endlife.1l1.icu/2023/02/26/%E8%8A%B1%E7%81%AB%E7%9A%84%E5%B0%8F%E5%AE%B6/"/>
    <id>https://endlife.1l1.icu/2023/02/26/%E8%8A%B1%E7%81%AB%E7%9A%84%E5%B0%8F%E5%AE%B6/</id>
    <published>2023-02-26T05:37:00.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>整了个频道，欢迎来玩<br>点击链接加入QQ频道【花火の小家】：<a href="https://pd.qq.com/s/9hengzdkr">https://pd.qq.com/s/9hengzdkr</a><br>频道号：56re98og55</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;整了个频道，欢迎来玩&lt;br&gt;点击链接加入QQ频道【花火の小家】：&lt;a href=&quot;https://pd.qq.com/s/9hengzdkr&quot;&gt;https://pd.qq.com/s/9hengzdkr&lt;/a&gt;&lt;br&gt;频道号：56re98og55&lt;/p&gt;
</summary>
      
    
    
    
    
    <category term="社交" scheme="https://endlife.1l1.icu/tags/%E7%A4%BE%E4%BA%A4/"/>
    
  </entry>
  
  <entry>
    <title>所有人现在立刻马上远离Notepad++</title>
    <link href="https://endlife.1l1.icu/2023/01/26/%E6%89%80%E6%9C%89%E4%BA%BA%E7%8E%B0%E5%9C%A8%E7%AB%8B%E5%88%BB%E9%A9%AC%E4%B8%8A%E8%BF%9C%E7%A6%BBNotepad++/"/>
    <id>https://endlife.1l1.icu/2023/01/26/%E6%89%80%E6%9C%89%E4%BA%BA%E7%8E%B0%E5%9C%A8%E7%AB%8B%E5%88%BB%E9%A9%AC%E4%B8%8A%E8%BF%9C%E7%A6%BBNotepad++/</id>
    <published>2023-01-26T15:10:15.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>不废话，自己看推文:<br class='item-img' data-src='https://media-fs.huahuo-cn.tk/api/raw/?path=/blog/%E5%85%A8%E9%83%A8%E4%BA%BA%E7%8E%B0%E5%9C%A8%E7%AB%8B%E5%88%BB%E9%A9%AC%E4%B8%8A%E8%BF%9C%E7%A6%BBnotepadplusplus/01.jpg'><img src="https://media-fs.huahuo-cn.tk/api/raw/?path=/blog/%E5%85%A8%E9%83%A8%E4%BA%BA%E7%8E%B0%E5%9C%A8%E7%AB%8B%E5%88%BB%E9%A9%AC%E4%B8%8A%E8%BF%9C%E7%A6%BBnotepadplusplus/01.jpg"><br><a href="https://twitter.com/Notepad_plus/status/1618276938342359042">https://twitter.com/Notepad_plus&#x2F;status&#x2F;1618276938342359042</a><br>一垃圾编辑器还出优越感了 少你一个地球停转?</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;不废话，自己看推文:&lt;br class=&#39;item-img&#39; data-src=&#39;https://media-fs.huahuo-cn.tk/api/raw/?path=/blog/%E5%85%A8%E9%83%A8%E4%BA%BA%E7%8E%B0%E5%9C%A8%</summary>
      
    
    
    
    
    <category term="编辑器" scheme="https://endlife.1l1.icu/tags/%E7%BC%96%E8%BE%91%E5%99%A8/"/>
    
  </entry>
  
  <entry>
    <title>关于Java与Kotlin的学习</title>
    <link href="https://endlife.1l1.icu/2023/01/06/%E5%85%B3%E4%BA%8EJava%E4%B8%8EKotlin%E5%AD%A6%E4%B9%A0/"/>
    <id>https://endlife.1l1.icu/2023/01/06/%E5%85%B3%E4%BA%8EJava%E4%B8%8EKotlin%E5%AD%A6%E4%B9%A0/</id>
    <published>2023-01-06T17:24:29.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>入坑Java和Kotlin一来，弯路没少走，觉得该写篇感想了。</p><div class="admonition warning"><p class="admonition-title">warning</p><p>本文内容全凭个人感受，不代表任何立场与观点</p></div><h2 id="入坑Java与Kotlin的原因"><a href="#入坑Java与Kotlin的原因" class="headerlink" title="入坑Java与Kotlin的原因"></a>入坑Java与Kotlin的原因</h2><p>Java入坑也有1年多了，Kotlin就短些，几个月吧，而且中途退坑了Kotlin好长一段时间，语法啥的都差不多忘了。</p><p>老实说，Java这门编程语言还是挺喜欢的，厌倦了Web技术，写点后端啥的也不错，因为我们这里几乎不上信息课，所以Python我也不会，自学了一段时间的PHP之后，对后端挺感兴趣，于是就打算开坑。开了个PHP的坑，无底洞，最后只能归档。但是一方面我个人对后端的兴趣不减，另一方面作为一名Minecraft Java版服务器的腐竹，考虑到两个因素，于是我入坑了Java。</p><h2 id="入坑过程"><a href="#入坑过程" class="headerlink" title="入坑过程"></a>入坑过程</h2><p>入坑Java的第一次是自学Android APP，但是最后还是没搞懂(事实上到现在我还不会JavaFx)，于是就放弃了。后来看到了<a href="https://simbot.forte.love/">Simple-Robot</a>这个玩意，又拿起来重新整了一下，结果显而易见，没有服务器，技术又差，就玩了几天然后跑了（XD。</p><p>真正让我开始写Java项目的是<a href="https://github.com/DreamVoid/MiraiMC">MiraiMC</a>这个项目，由于它可以通过Minecraft服务器运行，所以我对它非常的看重，并且看到它拥有较为齐全的API(也是最吸引我的)，于是便开始了我的Java之路。</p><p>最开始写的一团糟，然后就是不断的造Bug，顺便吐槽自己的项目<a href="https://github.com/XiaMoHuaHuo-CN/CatSero">CatSero</a>，现在去看v1的代码感觉跟shit一样(到v2已经重写了4次了)。也正是在这个过程中，我入坑了Kotlin这门语言。</p><p>让我入坑Kotlin的，一方面是它的便捷性，比如下面这段Java代码:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">String</span> <span class="variable">s</span> <span class="operator">=</span> <span class="string">&quot;helloworld&quot;</span>;</span><br><span class="line"><span class="type">boolean</span> <span class="variable">b</span> <span class="operator">=</span> <span class="literal">true</span>;</span><br><span class="line"><span class="type">int</span> <span class="variable">i</span> <span class="operator">=</span> <span class="number">123</span>;</span><br><span class="line"><span class="type">long</span> <span class="variable">l</span> <span class="operator">=</span> <span class="number">123456789</span>;</span><br></pre></td></tr></table></figure><p>前面要定义一堆的类型，而Kotlin:</p><figure class="highlight kotlin"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">val</span> s = <span class="string">&quot;helloworld&quot;</span></span><br><span class="line"><span class="keyword">val</span> b = <span class="literal">true</span></span><br><span class="line"><span class="keyword">val</span> i = <span class="number">123</span></span><br><span class="line"><span class="keyword">val</span> l = <span class="number">123456789</span></span><br></pre></td></tr></table></figure><p>直接无脑 <code>val</code> 或者 <code>var</code> ，根本不用管类型(有时候也会声明)，而且不需要打 <code>;</code> 来结束语句，就很舒服，而且这个类似js的样式非常吸引我(虽然我的js技术力为0，QAQ)。</p><h2 id="入坑后"><a href="#入坑后" class="headerlink" title="入坑后"></a>入坑后</h2><p>其实我现在觉得还好，自己对Java这块有些掌握，Kotlin那边方法基本相似，所以没什么语言鸿沟。</p><p>目前Java与Kotlin混写，有时候不由自主在Kotlin语句后面加 <code>;</code> ，然后编辑器警告了才发现就很艹。</p><p>入坑的时候我用的是 <code>Maven</code> 构建，后来因为多种原因换成了 <code>Gradle</code> 构建，这里想喷一下Maven中央仓库国内真的慢。</p><h2 id="之后"><a href="#之后" class="headerlink" title="之后"></a>之后</h2><p>emm，希望以后能精通Java吧，毕竟这门语言还是挺强的。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;入坑Java和Kotlin一来，弯路没少走，觉得该写篇感想了。&lt;/p&gt;
&lt;div class=&quot;admonition warning&quot;&gt;&lt;p class=&quot;admonition-title&quot;&gt;warning&lt;/p&gt;&lt;p&gt;本文内容全凭个人感受，不代表任何立场与观点&lt;/p&gt;
&lt;</summary>
      
    
    
    
    
    <category term="学习" scheme="https://endlife.1l1.icu/tags/%E5%AD%A6%E4%B9%A0/"/>
    
  </entry>
  
  <entry>
    <title>[BBOR]BBOutlineReloaded MOD相关链接收集</title>
    <link href="https://endlife.1l1.icu/2023/01/03/-BBOR-BBOutlineReloaded-MOD%E7%9B%B8%E5%85%B3%E9%93%BE%E6%8E%A5%E6%94%B6%E9%9B%86/"/>
    <id>https://endlife.1l1.icu/2023/01/03/-BBOR-BBOutlineReloaded-MOD%E7%9B%B8%E5%85%B3%E9%93%BE%E6%8E%A5%E6%94%B6%E9%9B%86/</id>
    <published>2023-01-03T02:46:29.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<h2 id="这是什么玩意"><a href="#这是什么玩意" class="headerlink" title="这是什么玩意"></a>这是什么玩意</h2><p>显示Minecraft世界的群系，区块信息等</p><h2 id="相关链接"><a href="#相关链接" class="headerlink" title="相关链接"></a>相关链接</h2><p>GitHub: <a href="https://github.com/irtimaled/BoundingBoxOutlineReloaded">https://github.com/irtimaled/BoundingBoxOutlineReloaded</a><br>CraftBukkit: <a href="https://dev.bukkit.org/projects/bounding-box-outline-reloaded/">https://dev.bukkit.org/projects/bounding-box-outline-reloaded/</a><br>MCMOD: <a href="https://www.mcmod.cn/class/1869.html">https://www.mcmod.cn/class/1869.html</a><br>Curseforge: <a href="https://www.curseforge.com/minecraft/mc-mods/bounding-box-outline-reloaded">https://www.curseforge.com/minecraft/mc-mods/bounding-box-outline-reloaded</a><br>Modtinth: <a href="https://modrinth.com/mod/bbor">https://modrinth.com/mod/bbor</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;这是什么玩意&quot;&gt;&lt;a href=&quot;#这是什么玩意&quot; class=&quot;headerlink&quot; title=&quot;这是什么玩意&quot;&gt;&lt;/a&gt;这是什么玩意&lt;/h2&gt;&lt;p&gt;显示Minecraft世界的群系，区块信息等&lt;/p&gt;
&lt;h2 id=&quot;相关链接&quot;&gt;&lt;a href=&quot;#相关链</summary>
      
    
    
    
    
    <category term="Minecraft" scheme="https://endlife.1l1.icu/tags/Minecraft/"/>
    
  </entry>
  
  <entry>
    <title>Velocity代理端踩坑</title>
    <link href="https://endlife.1l1.icu/2023/01/01/Velocity%E4%BB%A3%E7%90%86%E7%AB%AF%E8%B8%A9%E5%9D%91/"/>
    <id>https://endlife.1l1.icu/2023/01/01/Velocity%E4%BB%A3%E7%90%86%E7%AB%AF%E8%B8%A9%E5%9D%91/</id>
    <published>2023-01-01T04:54:53.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<div class="admonition note"><p class="admonition-title">note</p><p>这都踩坑，难受了</p></div><p>Velocity端使用 <code>modern</code> 模式转发数据的时候，子端的 <code>spigot.yml</code> 中需要把 <code>bungeecord</code> 选项改为 <code>false</code> ，不然会导致无法加入</p><p>同时要转发数据时要在Paper的配置文件里面将Velocity填写，以及将Velocity端中 <code>forwarding.secret</code> 文件内容填写到Paper的设置</p><p>要禁用Velocity端的 <code>/server</code> 命令，需要移除权限 <code>velocity.command.server</code><br>我的方案是在Velocity端装Lockperms插件然后移除权限<br>参考: <a href="https://docs.papermc.io/velocity/built-in-commands#server">https://docs.papermc.io/velocity/built-in-commands#server</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;div class=&quot;admonition note&quot;&gt;&lt;p class=&quot;admonition-title&quot;&gt;note&lt;/p&gt;&lt;p&gt;这都踩坑，难受了&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Velocity端使用 &lt;code&gt;modern&lt;/code&gt; 模式转发数据的时候，子端的 &lt;c</summary>
      
    
    
    
    
    <category term="Minecraft" scheme="https://endlife.1l1.icu/tags/Minecraft/"/>
    
    <category term="Velocity" scheme="https://endlife.1l1.icu/tags/Velocity/"/>
    
  </entry>
  
  <entry>
    <title>PHP file_get_contents() 伪造Referer</title>
    <link href="https://endlife.1l1.icu/2022/12/29/PHP-file-get-contents-%E4%BC%AA%E9%80%A0Referer/"/>
    <id>https://endlife.1l1.icu/2022/12/29/PHP-file-get-contents-%E4%BC%AA%E9%80%A0Referer/</id>
    <published>2022-12-29T02:33:19.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>方法如下<br>添加请求的Referer地址</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line"><span class="variable">$url</span> = <span class="string">&quot;&quot;</span>; <span class="comment">// 请求地址</span></span><br><span class="line"><span class="variable">$referer</span> = <span class="string">&quot;&quot;</span>; <span class="comment">// 这里写Referer</span></span><br><span class="line"><span class="variable">$opt</span> = <span class="keyword">array</span>(<span class="string">&#x27;http&#x27;</span> =&gt; <span class="keyword">array</span>(<span class="string">&#x27;header&#x27;</span>=&gt;<span class="string">&quot;Referer: <span class="subst">$referer</span>&quot;</span>));</span><br><span class="line"><span class="variable">$context</span> = <span class="title function_ invoke__">stream_context_create</span>(<span class="variable">$opt</span>);</span><br><span class="line"><span class="variable">$fgc</span> = <span class="title function_ invoke__">file_get_contents</span>(<span class="variable">$url</span>, <span class="literal">false</span>, <span class="variable">$context</span>);</span><br></pre></td></tr></table></figure><div class="admonition note"><p class="admonition-title">笔记：获取随机二次元图——破解微博图床Referer检测</p><p>代码如下原理：添加Referer为 <code>https://weibo.com</code> ，通过 <code>file_get_contents()</code> 由服务器获得图像数据再输出给客户端需要设置 <code>header()</code> 中 <code>Content-type</code></p></div><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line"><span class="variable">$url</span> = <span class="string">&quot;https://api.ixiaowai.cn/api/api.php&quot;</span>;</span><br><span class="line"><span class="variable">$opt</span> = <span class="keyword">array</span>(<span class="string">&#x27;http&#x27;</span> =&gt; <span class="keyword">array</span>(<span class="string">&#x27;header&#x27;</span>=&gt;<span class="string">&quot;Referer: https://weibo.com&quot;</span>));</span><br><span class="line"><span class="variable">$context</span> = <span class="title function_ invoke__">stream_context_create</span>(<span class="variable">$opt</span>);</span><br><span class="line"><span class="title function_ invoke__">header</span>(<span class="string">&quot;Content-type: image/jpeg&quot;</span>);</span><br><span class="line"><span class="keyword">echo</span> <span class="title function_ invoke__">file_get_contents</span>(<span class="variable">$url</span>, <span class="literal">false</span>, <span class="variable">$context</span>);</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;方法如下&lt;br&gt;添加请求的Referer地址&lt;/p&gt;
&lt;figure class=&quot;highlight php&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;l</summary>
      
    
    
    
    
    <category term="教程" scheme="https://endlife.1l1.icu/tags/%E6%95%99%E7%A8%8B/"/>
    
    <category term="笔记" scheme="https://endlife.1l1.icu/tags/%E7%AC%94%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>测试标签</title>
    <link href="https://endlife.1l1.icu/2022/12/27/%E6%B5%8B%E8%AF%95%E6%A0%87%E7%AD%BE/"/>
    <id>https://endlife.1l1.icu/2022/12/27/%E6%B5%8B%E8%AF%95%E6%A0%87%E7%AD%BE/</id>
    <published>2022-12-27T04:55:00.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<div class="admonition note"><p class="admonition-title">测试标题</p><p>测试文本</p></div><div class="admonition warning"><p class="admonition-title">警告</p><p>测试文本</p></div><div class="admonition todo"><p class="admonition-title">这是一条Todo</p><p>TODO: Test</p></div><div class="admonition info"><p class="admonition-title">还有Info</p><p>Test</p><p>多行</p></div>]]></content>
    
    
      
      
    <summary type="html">&lt;div class=&quot;admonition note&quot;&gt;&lt;p class=&quot;admonition-title&quot;&gt;测试标题
&lt;/p&gt;&lt;p&gt;测试文本&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;admonition warning&quot;&gt;&lt;p class=&quot;admonition-t</summary>
      
    
    
    
    
    <category term="测试" scheme="https://endlife.1l1.icu/tags/%E6%B5%8B%E8%AF%95/"/>
    
  </entry>
  
  <entry>
    <title>关于 风雨阁Storm Pavilion 这个项目</title>
    <link href="https://endlife.1l1.icu/2022/12/18/%E5%85%B3%E4%BA%8E-%E9%A3%8E%E9%9B%A8%E9%98%81Storm-Pavilion-%E8%BF%99%E4%B8%AA%E9%A1%B9%E7%9B%AE/"/>
    <id>https://endlife.1l1.icu/2022/12/18/%E5%85%B3%E4%BA%8E-%E9%A3%8E%E9%9B%A8%E9%98%81Storm-Pavilion-%E8%BF%99%E4%B8%AA%E9%A1%B9%E7%9B%AE/</id>
    <published>2022-12-18T08:37:17.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>时光一去不复返，距离风雨阁Storm Pavilion | Minecraft服务器开服已经快2年了，是时候写一篇文章表达自己对这个项目的态度了。</p><h2 id="什么是风雨阁Storm-Pavilion"><a href="#什么是风雨阁Storm-Pavilion" class="headerlink" title="什么是风雨阁Storm Pavilion"></a>什么是风雨阁Storm Pavilion</h2><p>请看官网<a href="https://spcraft.ml/">https://spcraft.ml</a></p><h2 id="风雨阁Storm-Pavilion的前身今世"><a href="#风雨阁Storm-Pavilion的前身今世" class="headerlink" title="风雨阁Storm Pavilion的前身今世"></a>风雨阁Storm Pavilion的前身今世</h2><p>其实早在风雨阁Storm Pavilion开服前，我就开过另一个Minecraft服务器——霜雪樱花Frost Snow Cherry Blossoms，但是由于当时的技术力不足，且没有资金，仅开服3个月就宣布停服。</p><p>霜雪樱花Frost Snow Cherry Blossoms是我的一个遗憾，也是我成长的一步。正是那个时候，我熟悉了Minecraft服务端（特别是Bukkit系的Spigot），也确定了开服的那些不可或缺的插件——EssX（当然现在可以用CMI来代替），PAPI，PLib等这些大部分插件依赖的，以及找到了我至今最喜欢的登录插件：CatSeedLogin。</p><p>说实话，风雨阁Storm Pavilion的官方群就是继承当年霜雪樱花Frost Snow Cherry Blossoms的官方群而来的。</p><h2 id="为什么开服"><a href="#为什么开服" class="headerlink" title="为什么开服"></a>为什么开服</h2><p>一方面是我对Minecraft这款游戏的热爱，另一方面想结交更多朋友。<br>当然，这也与我个人性格有关。</p><h2 id="现在"><a href="#现在" class="headerlink" title="现在"></a>现在</h2><p>虽然这个服务器每天没有什么人在线，但是我依然坚持这个项目。事实上，它是我目前为止坚持最久的一个项目。</p><p>无论当时有多困难——没有技术，没有资金，没有玩家，我依然走过来了。</p><p>尽管玩家很少，每天都招不到几个人，但它也是我的成功，是我不能失去的一部分了。它对我来说就像生命一样重要。</p><p>我本人并不富裕，也只是个学生——确切说发这篇文章时是个初中生，但这都不重要。或许有人会说我不务正业，但又有什么好反驳的呢？“走自己的路，让别人说去吧”或许你身边没有支持你的人（亦或是甚少），但不要忘记了你的初心。我曾经考虑要不要做个商业服，但最终我还是选择了公益服。</p><p>至于为什么选择开公益服，主要是我已经厌倦了各大游戏的内购了，氪金自然也不会被我当作收入。试想，只要花钱就可以实现自己的所求，这很明显不是我想见到的。我会一直坚持下去，做这样的公益服。</p><h2 id="未来？"><a href="#未来？" class="headerlink" title="未来？"></a>未来？</h2><p>细心的同志可能注意到标题多了个“？”，没错，这并不是误按，而是我刻意添加的。</p><p>对于风雨阁Storm Pavilion来说，它的未来是不可预料的。</p><p>出生在特殊时刻，被一个处在特殊时刻的人创建，走着公益服的道路——这样的服务器的未来我不敢想象。事实上，我又好几次想放弃，但又觉得对不起当初的承诺——“这个服务器会永远开下去”，每当想到这句不可能的承诺，我却又坚持下去了。未来怎样没人知道，“顺其自然吧”。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;时光一去不复返，距离风雨阁Storm Pavilion | Minecraft服务器开服已经快2年了，是时候写一篇文章表达自己对这个项目的态度了。&lt;/p&gt;
&lt;h2 id=&quot;什么是风雨阁Storm-Pavilion&quot;&gt;&lt;a href=&quot;#什么是风雨阁Storm-Pavilio</summary>
      
    
    
    
    
    <category term="Minecraft" scheme="https://endlife.1l1.icu/tags/Minecraft/"/>
    
    <category term="日记" scheme="https://endlife.1l1.icu/tags/%E6%97%A5%E8%AE%B0/"/>
    
    <category term="SPCraftMC" scheme="https://endlife.1l1.icu/tags/SPCraftMC/"/>
    
  </entry>
  
  <entry>
    <title>在这Termux里捣鼓IntelliJ IDEA</title>
    <link href="https://endlife.1l1.icu/2022/11/06/%E5%9C%A8%E8%BF%99Termux%E9%87%8C%E6%8D%A3%E9%BC%93IntelliJ%20IDEA/"/>
    <id>https://endlife.1l1.icu/2022/11/06/%E5%9C%A8%E8%BF%99Termux%E9%87%8C%E6%8D%A3%E9%BC%93IntelliJ%20IDEA/</id>
    <published>2022-11-06T06:57:00.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>懂得都懂，写Java写习惯了突然没电脑用不能用IDEA就很难受，然后就捣鼓了一下尝试Termux安装IDEA</p><h2 id="安装Ubuntu系统"><a href="#安装Ubuntu系统" class="headerlink" title="安装Ubuntu系统"></a>安装Ubuntu系统</h2><p>这里用<code>proot-distro</code>来安装和启动Ubuntu<br>首先执行安装命令安装(如果较慢请自备魔法，或者等)<br>安装<code>proot-distro</code></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pkg install proot-distro</span><br></pre></td></tr></table></figure><p>安装<code>Ubuntu</code></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">proot-distro install ubuntu</span><br></pre></td></tr></table></figure><p>安装完毕后，执行下方命令进入系统</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">proot-distro login ubuntu</span><br></pre></td></tr></table></figure><p>然后你就完成一半了!</p><h2 id="部署VNC服务"><a href="#部署VNC服务" class="headerlink" title="部署VNC服务"></a>部署VNC服务</h2><p>接下来让我们安装VNC服务，这里用的是<code>tmoe</code>的脚本<br>启动<code>tmoe</code>脚本</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /tmp</span><br><span class="line">curl -LO https://l.tmoe.me/2.awk</span><br><span class="line">awk -f 2.awk</span><br></pre></td></tr></table></figure><p>然后选择<code>&lt;Tools&gt;</code><br class='item-img' data-src='https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_150608_com.termux_edit_27848059930646.jpg'><img src="https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_150608_com.termux_edit_27848059930646.jpg"><br>选择<code>GUI:图形界面</code><br class='item-img' data-src='https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_150617_com.termux_edit_27841159832209.jpg'><img src="https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_150617_com.termux_edit_27841159832209.jpg"><br>选择<code>rootless_DE</code>，这样有没有root都可以跑<br class='item-img' data-src='https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_150639_com.termux_edit_27833758068148.jpg'><img src="https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_150639_com.termux_edit_27833758068148.jpg"><br>这里选择<code>xface</code><br class='item-img' data-src='https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_150642_com.termux_edit_27826552737941.jpg'><img src="https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_150642_com.termux_edit_27826552737941.jpg"><br class='item-img' data-src='https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_150705_com.termux_edit_27819461874400.jpg'><img src="https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_150705_com.termux_edit_27819461874400.jpg"><br>然后会提示是否安装推荐软件，这个安不安装不影响，取决于你自己<br>等等安装完成，会提示启动的VNC，我这里用<code>&lt;tiger&gt;</code><br class='item-img' data-src='https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_150924_com.termux_edit_27812829290026.jpg'><img src="https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_150924_com.termux_edit_27812829290026.jpg"><br>选择一个VNC端口，等会连接要用<br class='item-img' data-src='https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_150931_com.termux_edit_27802792696798.jpg'><img src="https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_150931_com.termux_edit_27802792696798.jpg"><br>至此部署完毕，全部选择最后一项退出tmoe脚本</p><h2 id="安装IntelliJ-IDEA"><a href="#安装IntelliJ-IDEA" class="headerlink" title="安装IntelliJ IDEA"></a>安装IntelliJ IDEA</h2><p>首先预备一个VNC客户端(随便下一个，这里推荐<code>VNC Viewer</code>)，等会连接要用<br>使用自带<code>apt</code>命令安装Java</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt update</span><br><span class="line">apt install openjdk-8-jre</span><br></pre></td></tr></table></figure><p>然后让我们下载IntelliJ IDEA Linux版本<br><a href="https://www.jetbrains.com/idea/">https://www.jetbrains.com/idea/</a><br>然后复制到一个目录下并解压，比如我放在<code>/opt/idea/</code>中</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cp</span> &lt;idea文件路径带名称&gt; /opt/idea/</span><br><span class="line"><span class="built_in">cd</span> /opt/idea/</span><br><span class="line">tar xzvf &lt;idea文件名&gt;</span><br></pre></td></tr></table></figure><p>然后就大功告成！没错，不需要配置环境变量</p><h2 id="连接VNC"><a href="#连接VNC" class="headerlink" title="连接VNC"></a>连接VNC</h2><p>设置下管理员密码，不然我自己都不知道</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">passwd</span><br></pre></td></tr></table></figure><p>输出</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">root@localhost:/opt/idea<span class="comment"># passwd</span></span><br><span class="line">New password:</span><br><span class="line">Retype new password:</span><br><span class="line">passwd: password updated successfully</span><br></pre></td></tr></table></figure><p>就成功了<br>先启动VNC服务</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">startvnc</span><br></pre></td></tr></table></figure><p>返回</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">root@localhost:/tmp<span class="comment"># startvnc</span></span><br><span class="line">Starting vnc server ...</span><br><span class="line">The current vnc port is 5902, and vnc address is localhost:5902                               removed <span class="string">&#x27;/tmp/.X2-lock&#x27;</span></span><br><span class="line">removed <span class="string">&#x27;/tmp/.X11-unix/X2&#x27;</span></span><br><span class="line">sudo service dbus start</span><br><span class="line"> * Starting system message bus dbus     [ OK ]</span><br><span class="line"> * dbus is not running                         Dbus is not running.</span><br><span class="line">正在启动vnc服务,本机vnc地址 localhost:5902</span><br><span class="line">IPv6地址 [::1]:5902                            [2409:815c:e614:146:e0d9:6073:d069:871f]:5902</span><br><span class="line">The LAN VNC address 局域网地址 192.168.1.113:5902</span><br><span class="line">vnc pid: 19185</span><br><span class="line">session pid: 19187</span><br><span class="line"><span class="built_in">cat</span> -n /root/.vnc/vnc.log</span><br><span class="line">     1</span><br><span class="line">     2  Xvnc TigerVNC 1.12.0 - built 2022-03-25 17:06</span><br><span class="line">     3  Copyright (C) 1999-2021 TigerVNC Team and many others (see README.rst)</span><br><span class="line">     4  Underlying X server release 12101003, X.Org                                                5</span><br><span class="line">     6</span><br><span class="line">     7  Sun Nov  6 07:33:19 2022</span><br><span class="line">     8   vncext:      VNC extension running!</span><br><span class="line">     9   vncext:      Listening <span class="keyword">for</span> VNC connections on all interface(s), port 5902                10   vncext:      created VNC server <span class="keyword">for</span> screen 0</span><br></pre></td></tr></table></figure><p>打开安装的VNC客户端，添加VNC服务器，地址写<code>localhost:&lt;刚才选的端口&gt;</code>，连接<br>显示像我这个图就成功了<br class='item-img' data-src='https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_153428_com.realvnc.viewer.android.jpg'><img src="https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_153428_com.realvnc.viewer.android.jpg"><br>这里直接移除插件就行<br>打开刚才我们安装idea的位置，解压出的文件中有个<code>bin</code>文件夹，里面有个<code>idea.sh</code>，运行即可启动IntelliJ IDEA<br class='item-img' data-src='https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_154249_com.realvnc.viewer.android.jpg'><img src="https://resource.huahuo-cn.tk/media/blog/termux-idea/Screenshot_20221106_154249_com.realvnc.viewer.android.jpg"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;懂得都懂，写Java写习惯了突然没电脑用不能用IDEA就很难受，然后就捣鼓了一下尝试Termux安装IDEA&lt;/p&gt;
&lt;h2 id=&quot;安装Ubuntu系统&quot;&gt;&lt;a href=&quot;#安装Ubuntu系统&quot; class=&quot;headerlink&quot; title=&quot;安装Ubuntu系统</summary>
      
    
    
    
    
    <category term="教程" scheme="https://endlife.1l1.icu/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>在Termux上安装bore</title>
    <link href="https://endlife.1l1.icu/2022/11/06/%E5%9C%A8Termux%E4%B8%8A%E5%AE%89%E8%A3%85bore/"/>
    <id>https://endlife.1l1.icu/2022/11/06/%E5%9C%A8Termux%E4%B8%8A%E5%AE%89%E8%A3%85bore/</id>
    <published>2022-11-06T06:50:00.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>最近发现了bore这样一个项目:<br class='item-img' data-src='https://resource.huahuo-cn.tk/media/blog/bore-inc.jpg'><img src="https://resource.huahuo-cn.tk/media/blog/bore-inc.jpg" alt="bore"><br>其实就是类似<code>frp</code>的NAT打洞工具，但是对比了一下，bore更适合cli开发<br>于是就打算在Termux上安装</p><h2 id="Termux-Tools一键安装"><a href="#Termux-Tools一键安装" class="headerlink" title="Termux-Tools一键安装"></a>Termux-Tools一键安装</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pkg install bore</span><br></pre></td></tr></table></figure><p>然后执行命令<code>bore</code>，应该会看到如下输出<br class='item-img' data-src='https://resource.huahuo-cn.tk/media/blog/bore-ret.jpg'><img src="https://resource.huahuo-cn.tk/media/blog/bore-ret.jpg" alt="bore-ret"><br>这样代表你安装成功了</p><h2 id="开启bore隧道"><a href="#开启bore隧道" class="headerlink" title="开启bore隧道"></a>开启bore隧道</h2><p>运行<code>local</code>命令，启动bore隧道</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bore <span class="built_in">local</span> &lt;本地端口&gt; --to bore.pub</span><br></pre></td></tr></table></figure><p>或者使用自定义bore服务器</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bore <span class="built_in">local</span> &lt;本地端口&gt; --to &lt;远程服务器地址&gt;</span><br></pre></td></tr></table></figure><p>输出如下内容则代表成功了，<code>listening at </code>后面的<code>bore.pub:&lt;远程端口&gt;</code>就是远程访问地址<br>这个地址是随机分配的，不用担心被占用</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">2022-11-06T06:42:17.773908Z  INFO bore_cli::client: connected to server remote_port=38309</span><br><span class="line">2022-11-06T06:42:17.774004Z  INFO bore_cli::client: listening at bore.pub:38309</span><br></pre></td></tr></table></figure><h2 id="自建bore服务器"><a href="#自建bore服务器" class="headerlink" title="自建bore服务器"></a>自建bore服务器</h2><p>运行下面的命令即可启动bore服务器</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bore server</span><br></pre></td></tr></table></figure><p>输出下面的就是成功开启，<code>listening addr=</code>后面就是访问地址</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">2022-11-06T06:45:13.617597Z  INFO bore_cli::server: server listening addr=0.0.0.0:7835</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;最近发现了bore这样一个项目:&lt;br class=&#39;item-img&#39; data-src=&#39;https://resource.huahuo-cn.tk/media/blog/bore-inc.jpg&#39;&gt;&lt;img src=&quot;https://resource.huahuo-c</summary>
      
    
    
    
    
    <category term="教程" scheme="https://endlife.1l1.icu/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>2022-10-22晚间记事</title>
    <link href="https://endlife.1l1.icu/2022/10/22/2022-10-22%E6%99%9A%E9%97%B4%E8%AE%B0%E4%BA%8B/"/>
    <id>https://endlife.1l1.icu/2022/10/22/2022-10-22%E6%99%9A%E9%97%B4%E8%AE%B0%E4%BA%8B/</id>
    <published>2022-10-22T15:47:23.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>今天看中了微软的Surface Go 3笔记本，准备入手一台。<br>另外拆服务器CPU风扇没拆下来很尴尬<br>服务器开不起来导致没法更新CatSero，有空看看有没有手机上IDEA的替代品。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;今天看中了微软的Surface Go 3笔记本，准备入手一台。&lt;br&gt;另外拆服务器CPU风扇没拆下来很尴尬&lt;br&gt;服务器开不起来导致没法更新CatSero，有空看看有没有手机上IDEA的替代品。&lt;/p&gt;
</summary>
      
    
    
    
    
    <category term="日记" scheme="https://endlife.1l1.icu/tags/%E6%97%A5%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>2022-10-22晨记</title>
    <link href="https://endlife.1l1.icu/2022/10/21/2022-10-22%E6%99%A8%E8%AE%B0/"/>
    <id>https://endlife.1l1.icu/2022/10/21/2022-10-22%E6%99%A8%E8%AE%B0/</id>
    <published>2022-10-21T16:43:34.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>无事，人较疲倦。<br>昨日更新了Blog的样式，今日计划修CatSero的Bug<br>顺便写下作业</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;无事，人较疲倦。&lt;br&gt;昨日更新了Blog的样式，今日计划修CatSero的Bug&lt;br&gt;顺便写下作业&lt;/p&gt;
</summary>
      
    
    
    
    
    <category term="日记" scheme="https://endlife.1l1.icu/tags/%E6%97%A5%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>调用Bukkit内置API读取指定YAML文件作为配置调用</title>
    <link href="https://endlife.1l1.icu/2022/09/04/%E8%B0%83%E7%94%A8Bukkit%E5%86%85%E7%BD%AEAPI%E8%AF%BB%E5%8F%96%E6%8C%87%E5%AE%9AYAML%E6%96%87%E4%BB%B6%E4%BD%9C%E4%B8%BA%E9%85%8D%E7%BD%AE%E8%B0%83%E7%94%A8/"/>
    <id>https://endlife.1l1.icu/2022/09/04/%E8%B0%83%E7%94%A8Bukkit%E5%86%85%E7%BD%AEAPI%E8%AF%BB%E5%8F%96%E6%8C%87%E5%AE%9AYAML%E6%96%87%E4%BB%B6%E4%BD%9C%E4%B8%BA%E9%85%8D%E7%BD%AE%E8%B0%83%E7%94%A8/</id>
    <published>2022-09-04T07:18:00.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>有时候想要读取自定义文件作为配置文件用，但是Bukkit没有内置，只有一个<code>Plugin.getConfig()</code>方法获取<code>config.yml</code>作为配置文件，就很烦<br>但是Bukkit提供了<code>FileConfiguration</code>和<code>YamlConfiguration</code>方法，可以自己调接口<br>实例如下:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">static</span> FileConfiguration <span class="title function_">extraConfigs</span><span class="params">(Plugin plugin, String config)</span> &#123;</span><br><span class="line">    <span class="keyword">return</span> YamlConfiguration.loadConfiguration(</span><br><span class="line">        <span class="comment">// 从插件目录下获取</span></span><br><span class="line">        <span class="keyword">new</span> <span class="title class_">File</span>(plugin.getDataFolder(), config)</span><br><span class="line">    );</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>上面是写进一个方法里面，可以直接调</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment"> plugin是你的插件对象</span></span><br><span class="line"><span class="comment"> config是你的配置文件名字，如果需要读子目录就要写相对于插件目录的绝对路径</span></span><br><span class="line"><span class="comment">*/</span></span><br><span class="line">extraConfigs(Plugin plugin, String config);</span><br></pre></td></tr></table></figure><p>或者直接写成一个变量</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 需要先定义插件对象Plugin plugin</span></span><br><span class="line"><span class="type">FileConfiguration</span> <span class="variable">Config</span> <span class="operator">=</span> YamlConfiguration.loadConfiguration(</span><br><span class="line">    <span class="keyword">new</span> <span class="title class_">File</span>(plugin.getDataFolder(), <span class="string">&quot;文件名&quot;</span>)</span><br><span class="line">);</span><br></pre></td></tr></table></figure><p>然后就可以像<code>Plugin.getConfig()</code>一样获取Yaml内的值<br>例如:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 例子1</span></span><br><span class="line">extraConfigs(Bukkit.getPlugin(<span class="string">&quot;Demo&quot;</span>), <span class="string">&quot;custom-config.yml&quot;</span>).getString(<span class="string">&quot;demo&quot;</span>);</span><br><span class="line"><span class="comment">// 例子2</span></span><br><span class="line"><span class="type">Plugin</span> <span class="variable">plugin</span> <span class="operator">=</span> Bukkit.getPlugin(<span class="string">&quot;Demo&quot;</span>);</span><br><span class="line"><span class="type">FileConfiguration</span> <span class="variable">Config</span> <span class="operator">=</span> YamlConfiguration.loadConfiguration(</span><br><span class="line">    <span class="keyword">new</span> <span class="title class_">File</span>(plugin.getDataFolder(), <span class="string">&quot;demo&quot;</span>)</span><br><span class="line">);</span><br><span class="line">Config.getString(<span class="string">&quot;demo&quot;</span>);</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;有时候想要读取自定义文件作为配置文件用，但是Bukkit没有内置，只有一个&lt;code&gt;Plugin.getConfig()&lt;/code&gt;方法获取&lt;code&gt;config.yml&lt;/code&gt;作为配置文件，就很烦&lt;br&gt;但是Bukkit提供了&lt;code&gt;FileConfigu</summary>
      
    
    
    
    
    <category term="教程" scheme="https://endlife.1l1.icu/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>CloudFlare Workers脚本反代理网站</title>
    <link href="https://endlife.1l1.icu/2022/08/15/CloudFlare-Workers%E8%84%9A%E6%9C%AC%E5%8F%8D%E4%BB%A3%E7%90%86%E7%BD%91%E7%AB%99/"/>
    <id>https://endlife.1l1.icu/2022/08/15/CloudFlare-Workers%E8%84%9A%E6%9C%AC%E5%8F%8D%E4%BB%A3%E7%90%86%E7%BD%91%E7%AB%99/</id>
    <published>2022-08-15T03:28:25.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>网上的脚本不怎么好用于是自己改了一下<br><code>upstream</code>和<code>upstream_mobile</code>按注释填写就好了</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 替换成你想镜像的站点</span></span><br><span class="line"><span class="keyword">const</span> upstream = <span class="string">&#x27;&#x27;</span>;</span><br><span class="line"> </span><br><span class="line"><span class="comment">// 如果那个站点有专门的移动适配站点，否则保持和上面一致</span></span><br><span class="line"><span class="keyword">const</span> upstream_mobile = <span class="string">&#x27;&#x27;</span>;</span><br><span class="line"> </span><br><span class="line"><span class="comment">// 你希望禁止哪些国家访问（例如：US）</span></span><br><span class="line"><span class="keyword">const</span> blocked_region = [];</span><br><span class="line"> </span><br><span class="line"><span class="comment">// 禁止访问的IP</span></span><br><span class="line"><span class="keyword">const</span> blocked_ip_address = [<span class="string">&#x27;0.0.0.0&#x27;</span>, <span class="string">&#x27;127.0.0.1&#x27;</span>];</span><br><span class="line"></span><br><span class="line"><span class="comment">// 文本替换</span></span><br><span class="line"><span class="comment">// $upstream代表原域名，$custom_domain代表当前域名</span></span><br><span class="line"><span class="keyword">const</span> replace_dict = &#123;</span><br><span class="line">    <span class="string">&#x27;$upstream&#x27;</span>: <span class="string">&#x27;$custom_domain&#x27;</span>,</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 文本替换检查返回MIME</span></span><br><span class="line"><span class="keyword">const</span> replace_dict_check_mime = <span class="literal">false</span>;</span><br><span class="line"> </span><br><span class="line"><span class="comment">//以下内容都不用动</span></span><br><span class="line"><span class="title function_">addEventListener</span>(<span class="string">&#x27;fetch&#x27;</span>, <span class="function"><span class="params">event</span> =&gt;</span> &#123;</span><br><span class="line">    event.<span class="title function_">respondWith</span>(<span class="title function_">fetchAndApply</span>(event.<span class="property">request</span>));</span><br><span class="line">&#125;)</span><br><span class="line"> </span><br><span class="line"><span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">fetchAndApply</span>(<span class="params">request</span>) &#123;</span><br><span class="line"> </span><br><span class="line">    <span class="keyword">const</span> region = request.<span class="property">headers</span>.<span class="title function_">get</span>(<span class="string">&#x27;cf-ipcountry&#x27;</span>).<span class="title function_">toUpperCase</span>();</span><br><span class="line">    <span class="keyword">const</span> ip_address = request.<span class="property">headers</span>.<span class="title function_">get</span>(<span class="string">&#x27;cf-connecting-ip&#x27;</span>);</span><br><span class="line">    <span class="keyword">const</span> user_agent = request.<span class="property">headers</span>.<span class="title function_">get</span>(<span class="string">&#x27;user-agent&#x27;</span>);</span><br><span class="line"> </span><br><span class="line">    <span class="keyword">let</span> response = <span class="literal">null</span>;</span><br><span class="line">    <span class="keyword">let</span> url = <span class="keyword">new</span> <span class="title function_">URL</span>(request.<span class="property">url</span>);</span><br><span class="line">    <span class="keyword">let</span> url_host = url.<span class="property">host</span>;</span><br><span class="line"> </span><br><span class="line">    <span class="keyword">if</span> (url.<span class="property">protocol</span> == <span class="string">&#x27;http:&#x27;</span>) &#123;</span><br><span class="line">        url.<span class="property">protocol</span> = <span class="string">&#x27;https:&#x27;</span></span><br><span class="line">        response = <span class="title class_">Response</span>.<span class="title function_">redirect</span>(url.<span class="property">href</span>);</span><br><span class="line">        <span class="keyword">return</span> response;</span><br><span class="line">    &#125;</span><br><span class="line"> </span><br><span class="line">    <span class="keyword">if</span> (<span class="keyword">await</span> <span class="title function_">device_status</span>(user_agent)) &#123;</span><br><span class="line">        upstream_domain = upstream</span><br><span class="line">    &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">        upstream_domain = upstream_mobile</span><br><span class="line">    &#125;</span><br><span class="line"> </span><br><span class="line">    url.<span class="property">host</span> = upstream_domain;</span><br><span class="line"> </span><br><span class="line">    <span class="keyword">if</span> (blocked_region.<span class="title function_">includes</span>(region)) &#123;</span><br><span class="line">        response = <span class="keyword">new</span> <span class="title class_">Response</span>(<span class="string">&#x27;Access denied: WorkersProxy is not available in your region yet.&#x27;</span>, &#123;</span><br><span class="line">            <span class="attr">status</span>: <span class="number">403</span></span><br><span class="line">        &#125;);</span><br><span class="line">    &#125; <span class="keyword">else</span> <span class="keyword">if</span>(blocked_ip_address.<span class="title function_">includes</span>(ip_address))&#123;</span><br><span class="line">        response = <span class="keyword">new</span> <span class="title class_">Response</span>(<span class="string">&#x27;Access denied: Your IP address is blocked by WorkersProxy.&#x27;</span>, &#123;</span><br><span class="line">            <span class="attr">status</span>: <span class="number">403</span></span><br><span class="line">        &#125;);</span><br><span class="line">    &#125; <span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">let</span> method = request.<span class="property">method</span>;</span><br><span class="line">        <span class="keyword">let</span> request_headers = request.<span class="property">headers</span>;</span><br><span class="line">        <span class="keyword">let</span> new_request_headers = <span class="keyword">new</span> <span class="title class_">Headers</span>(request_headers);</span><br><span class="line"> </span><br><span class="line">        new_request_headers.<span class="title function_">set</span>(<span class="string">&#x27;Host&#x27;</span>, upstream_domain);</span><br><span class="line">        new_request_headers.<span class="title function_">set</span>(<span class="string">&#x27;Referer&#x27;</span>, url.<span class="property">href</span>);</span><br><span class="line"> </span><br><span class="line">        <span class="keyword">let</span> original_response = <span class="keyword">await</span> <span class="title function_">fetch</span>(url.<span class="property">href</span>, &#123;</span><br><span class="line">            <span class="attr">method</span>: method,</span><br><span class="line">            <span class="attr">headers</span>: new_request_headers</span><br><span class="line">        &#125;)</span><br><span class="line"> </span><br><span class="line">        <span class="keyword">let</span> original_response_clone = original_response.<span class="title function_">clone</span>();</span><br><span class="line">        <span class="keyword">let</span> original_text = <span class="literal">null</span>;</span><br><span class="line">        <span class="keyword">let</span> response_headers = original_response.<span class="property">headers</span>;</span><br><span class="line">        <span class="keyword">let</span> new_response_headers = <span class="keyword">new</span> <span class="title class_">Headers</span>(response_headers);</span><br><span class="line">        <span class="keyword">let</span> status = original_response.<span class="property">status</span>;</span><br><span class="line"> </span><br><span class="line">        new_response_headers.<span class="title function_">set</span>(<span class="string">&#x27;access-control-allow-origin&#x27;</span>, <span class="string">&#x27;*&#x27;</span>);</span><br><span class="line">        new_response_headers.<span class="title function_">set</span>(<span class="string">&#x27;access-control-allow-credentials&#x27;</span>, <span class="literal">true</span>);</span><br><span class="line">        new_response_headers.<span class="title function_">delete</span>(<span class="string">&#x27;content-security-policy&#x27;</span>);</span><br><span class="line">        new_response_headers.<span class="title function_">delete</span>(<span class="string">&#x27;content-security-policy-report-only&#x27;</span>);</span><br><span class="line">        new_response_headers.<span class="title function_">delete</span>(<span class="string">&#x27;clear-site-data&#x27;</span>);</span><br><span class="line"> </span><br><span class="line">        <span class="keyword">const</span> content_type = new_response_headers.<span class="title function_">get</span>(<span class="string">&#x27;content-type&#x27;</span>);</span><br><span class="line">        <span class="keyword">if</span> (replace_dict_check_mime &amp;&amp; content_type.<span class="title function_">includes</span>(<span class="string">&#x27;text/html&#x27;</span>) &amp;&amp; content_type.<span class="title function_">includes</span>(<span class="string">&#x27;UTF-8&#x27;</span>)) &#123;</span><br><span class="line">        original_text = original_response_clone.<span class="property">body</span>;</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            original_text = <span class="keyword">await</span> <span class="title function_">replace_response_text</span>(original_response_clone, upstream_domain, url_host);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="comment">//&#125; else &#123;</span></span><br><span class="line">        <span class="comment">//    original_text = original_response_clone.body;</span></span><br><span class="line"> </span><br><span class="line">        response = <span class="keyword">new</span> <span class="title class_">Response</span>(original_text, &#123;</span><br><span class="line">            status,</span><br><span class="line">            <span class="attr">headers</span>: new_response_headers</span><br><span class="line">        &#125;)</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> response;</span><br><span class="line">&#125;</span><br><span class="line"> </span><br><span class="line"><span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">replace_response_text</span>(<span class="params">response, upstream_domain, host_name</span>) &#123;</span><br><span class="line">    <span class="keyword">let</span> text = <span class="keyword">await</span> response.<span class="title function_">text</span>()</span><br><span class="line"> </span><br><span class="line">    <span class="keyword">var</span> i, j;</span><br><span class="line">    <span class="keyword">for</span> (i <span class="keyword">in</span> replace_dict) &#123;</span><br><span class="line">        j = replace_dict[i]</span><br><span class="line">        <span class="keyword">if</span> (i == <span class="string">&#x27;$upstream&#x27;</span>) &#123;</span><br><span class="line">            i = upstream_domain</span><br><span class="line">        &#125; <span class="keyword">else</span> <span class="keyword">if</span> (i == <span class="string">&#x27;$custom_domain&#x27;</span>) &#123;</span><br><span class="line">            i = host_name</span><br><span class="line">        &#125;</span><br><span class="line"> </span><br><span class="line">        <span class="keyword">if</span> (j == <span class="string">&#x27;$upstream&#x27;</span>) &#123;</span><br><span class="line">            j = upstream_domain</span><br><span class="line">        &#125; <span class="keyword">else</span> <span class="keyword">if</span> (j == <span class="string">&#x27;$custom_domain&#x27;</span>) &#123;</span><br><span class="line">            j = host_name</span><br><span class="line">        &#125;</span><br><span class="line"> </span><br><span class="line">        <span class="keyword">let</span> re = <span class="keyword">new</span> <span class="title class_">RegExp</span>(i, <span class="string">&#x27;g&#x27;</span>)</span><br><span class="line">        text = text.<span class="title function_">replace</span>(re, j);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> text;</span><br><span class="line">&#125;</span><br><span class="line"> </span><br><span class="line"><span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">device_status</span> (user_agent_info) &#123;</span><br><span class="line">    <span class="keyword">var</span> agents = [<span class="string">&quot;Android&quot;</span>, <span class="string">&quot;iPhone&quot;</span>, <span class="string">&quot;SymbianOS&quot;</span>, <span class="string">&quot;Windows Phone&quot;</span>, <span class="string">&quot;iPad&quot;</span>, <span class="string">&quot;iPod&quot;</span>];</span><br><span class="line">    <span class="keyword">var</span> flag = <span class="literal">true</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">var</span> v = <span class="number">0</span>; v &lt; agents.<span class="property">length</span>; v++) &#123; <span class="keyword">if</span> (user_agent_info.<span class="title function_">indexOf</span>(agents[v]) &gt; <span class="number">0</span>) &#123;</span><br><span class="line">            flag = <span class="literal">false</span>;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> flag;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;网上的脚本不怎么好用于是自己改了一下&lt;br&gt;&lt;code&gt;upstream&lt;/code&gt;和&lt;code&gt;upstream_mobile&lt;/code&gt;按注释填写就好了&lt;/p&gt;
&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td </summary>
      
    
    
    
    
    <category term="教程" scheme="https://endlife.1l1.icu/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>本站已迁移部分内容</title>
    <link href="https://endlife.1l1.icu/2022/08/05/%E6%9C%AC%E7%AB%99%E5%B7%B2%E8%BF%81%E7%A7%BB%E9%83%A8%E5%88%86%E5%86%85%E5%AE%B9/"/>
    <id>https://endlife.1l1.icu/2022/08/05/%E6%9C%AC%E7%AB%99%E5%B7%B2%E8%BF%81%E7%A7%BB%E9%83%A8%E5%88%86%E5%86%85%E5%AE%B9/</id>
    <published>2022-08-05T05:04:49.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>已迁移部分内容，具体如下:</p><ul><li>status.huahuo-cn.tk -&gt; status.xmnetwork.ga</li><li>csu.huahuo-cn.tk -&gt; csa-webapi.xmnetwork.ga</li><li>xmdisk.ga -&gt; disk.xmnetwork.ga</li><li>img.xmdisk.ga -&gt; media.xmnetwork.ga</li><li>comments.xmdisk.ga -&gt; comment.xmnetwork.ga</li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;已迁移部分内容，具体如下:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;status.huahuo-cn.tk -&amp;gt; status.xmnetwork.ga&lt;/li&gt;
&lt;li&gt;csu.huahuo-cn.tk -&amp;gt; csa-webapi.xmnetwork.ga&lt;/li&gt;
&lt;li</summary>
      
    
    
    
    
    <category term="公告" scheme="https://endlife.1l1.icu/tags/%E5%85%AC%E5%91%8A/"/>
    
  </entry>
  
  <entry>
    <title>Bukkit通过SQLite记录/读取玩家UUID</title>
    <link href="https://endlife.1l1.icu/2022/07/28/Bukkit%E9%80%9A%E8%BF%87SQLite%E8%AE%B0%E5%BD%95-%E8%AF%BB%E5%8F%96%E7%8E%A9%E5%AE%B6UUID/"/>
    <id>https://endlife.1l1.icu/2022/07/28/Bukkit%E9%80%9A%E8%BF%87SQLite%E8%AE%B0%E5%BD%95-%E8%AF%BB%E5%8F%96%E7%8E%A9%E5%AE%B6UUID/</id>
    <published>2022-07-28T11:38:00.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<h2 id="SQL对接部分"><a href="#SQL对接部分" class="headerlink" title="SQL对接部分"></a>SQL对接部分</h2><p>先是个类，对接SQL</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> moe.xmcn.example;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> java.sql.*;</span><br><span class="line"><span class="keyword">import</span> java.util.Arrays;</span><br><span class="line"><span class="keyword">import</span> java.util.UUID;</span><br><span class="line"><span class="keyword">import</span> java.util.logging.Level;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">Database</span> &#123;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> <span class="title class_">UUIDDatabase</span> &#123;</span><br><span class="line">        <span class="keyword">private</span> <span class="keyword">static</span> Connection <span class="title function_">getDatabase</span><span class="params">()</span> &#123;</span><br><span class="line">            <span class="type">Connection</span> <span class="variable">c</span> <span class="operator">=</span> <span class="literal">null</span>;</span><br><span class="line">            <span class="keyword">try</span> &#123;</span><br><span class="line">                Class.forName(<span class="string">&quot;org.sqlite.JDBC&quot;</span>);</span><br><span class="line">                c = DriverManager.getConnection(<span class="string">&quot;jdbc:sqlite:&quot;</span> + Config.plugin.getDataFolder() + <span class="string">&quot;/database.db&quot;</span>);</span><br><span class="line">            &#125; <span class="keyword">catch</span> (Exception e) &#123;</span><br><span class="line">                Config.plugin.getLogger().log(Level.WARNING, <span class="string">&quot;连接数据库发生异常:\n&quot;</span> + Arrays.toString(e.getStackTrace()));</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">return</span> c;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">intTable</span><span class="params">()</span> <span class="keyword">throws</span> SQLException &#123;</span><br><span class="line">            <span class="type">Statement</span> <span class="variable">cs</span> <span class="operator">=</span> getDatabase().createStatement();</span><br><span class="line">            <span class="type">String</span> <span class="variable">ct</span> <span class="operator">=</span> <span class="string">&quot;CREATE TABLE IF NOT EXISTS UUIDTableMap&quot;</span> +</span><br><span class="line">                        <span class="string">&quot;(NAME TEXT     NOT NULL, &quot;</span> +</span><br><span class="line">                        <span class="string">&quot; UUID TEXT     NOT NULL)&quot;</span>;</span><br><span class="line">            cs.executeUpdate(ct);</span><br><span class="line">            cs.close();</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">insertTable</span><span class="params">(String player_name, UUID player_uuid)</span> <span class="keyword">throws</span> SQLException &#123;</span><br><span class="line">            <span class="type">Statement</span> <span class="variable">cs</span> <span class="operator">=</span> getDatabase().createStatement();</span><br><span class="line">            <span class="type">String</span> <span class="variable">ct</span> <span class="operator">=</span> <span class="string">&quot;INSERT INTO UUIDTableMap (NAME, UUID)&quot;</span> +</span><br><span class="line">                        <span class="string">&quot; VALUES (&#x27;&quot;</span> + player_name + <span class="string">&quot;&#x27;, &#x27;&quot;</span> + player_uuid + <span class="string">&quot;&#x27;)&quot;</span>;</span><br><span class="line">            cs.executeUpdate(ct);</span><br><span class="line">            cs.close();</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> <span class="title class_">readTable</span> &#123;</span><br><span class="line">            <span class="keyword">public</span> <span class="keyword">static</span> UUID <span class="title function_">getUUID</span><span class="params">(String name)</span> <span class="keyword">throws</span> SQLException &#123;</span><br><span class="line">                <span class="type">UUID</span> <span class="variable">uuid</span> <span class="operator">=</span> <span class="literal">null</span>;</span><br><span class="line"></span><br><span class="line">                <span class="type">Statement</span> <span class="variable">cs</span> <span class="operator">=</span> getDatabase().createStatement();</span><br><span class="line">                <span class="type">ResultSet</span> <span class="variable">rs</span> <span class="operator">=</span> cs.executeQuery(<span class="string">&quot;SELECT * FROM UUIDTableMap;&quot;</span>);</span><br><span class="line">                <span class="keyword">while</span> (rs.next()) &#123;</span><br><span class="line">                    uuid = UUID.fromString(rs.getString(name));</span><br><span class="line">                &#125;</span><br><span class="line">                rs.close();</span><br><span class="line">                cs.close();</span><br><span class="line">                <span class="keyword">return</span> uuid;</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            <span class="keyword">public</span> <span class="keyword">static</span> String <span class="title function_">getName</span><span class="params">(UUID uuid)</span> <span class="keyword">throws</span> SQLException &#123;</span><br><span class="line">                <span class="type">String</span> <span class="variable">name</span> <span class="operator">=</span> <span class="literal">null</span>;</span><br><span class="line"></span><br><span class="line">                <span class="type">Statement</span> <span class="variable">cs</span> <span class="operator">=</span> getDatabase().createStatement();</span><br><span class="line">                <span class="type">ResultSet</span> <span class="variable">rs</span> <span class="operator">=</span> cs.executeQuery(<span class="string">&quot;SELECT * FROM UUIDTableMap;&quot;</span>);</span><br><span class="line">                <span class="keyword">while</span> (rs.next()) &#123;</span><br><span class="line">                    name = rs.getString(String.valueOf(uuid));</span><br><span class="line">                &#125;</span><br><span class="line">                rs.close();</span><br><span class="line">                cs.close();</span><br><span class="line">                <span class="keyword">return</span> name;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="记录部分"><a href="#记录部分" class="headerlink" title="记录部分"></a>记录部分</h2><p>然后创建个监听器来监听Bukkit的PlayerJoinEvent，有玩家加入就记录进数据库就好了下面是个例子<br>Config.plugin是我写在插件类里面的Plugin定义</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">Plugin</span> <span class="variable">plugin</span> <span class="operator">=</span> Main.getPlugin(Main.class);</span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> moe.xmcn.example;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> moe.xmcn.catsero.utils.Config;</span><br><span class="line"><span class="keyword">import</span> moe.xmcn.catsero.utils.Database;</span><br><span class="line"><span class="keyword">import</span> org.bukkit.event.EventHandler;</span><br><span class="line"><span class="keyword">import</span> org.bukkit.event.Listener;</span><br><span class="line"><span class="keyword">import</span> org.bukkit.event.player.PlayerJoinEvent;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> java.sql.SQLException;</span><br><span class="line"><span class="keyword">import</span> java.util.UUID;</span><br><span class="line"><span class="keyword">import</span> java.util.logging.Level;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">PlayerRecord</span> &#123;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> <span class="title class_">UUIDRecord</span> <span class="keyword">implements</span> <span class="title class_">Listener</span> &#123;</span><br><span class="line">        <span class="meta">@EventHandler</span></span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">record</span><span class="params">(PlayerJoinEvent pje)</span> &#123;</span><br><span class="line">            <span class="type">String</span> <span class="variable">player_name</span> <span class="operator">=</span> pje.getPlayer().getName();</span><br><span class="line">            <span class="type">UUID</span> <span class="variable">player_uuid</span> <span class="operator">=</span> pje.getPlayer().getUniqueId();</span><br><span class="line">            <span class="keyword">try</span> &#123;</span><br><span class="line">                Database.UUIDDatabase.insertTable(player_name, player_uuid);</span><br><span class="line">            &#125; <span class="keyword">catch</span> (SQLException e) &#123;</span><br><span class="line">                Config.plugin.getLogger().log(Level.WARNING, <span class="string">&quot;无法写入数据库&quot;</span>);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="调用"><a href="#调用" class="headerlink" title="调用"></a>调用</h2><p>通过玩家名获取UUID</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Database.UUIDDatabase.readTable.getUUID(String name);</span><br></pre></td></tr></table></figure><p>通过UUID获取玩家名</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Database.UUIDDatabase.readTable.getName(String name);</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;SQL对接部分&quot;&gt;&lt;a href=&quot;#SQL对接部分&quot; class=&quot;headerlink&quot; title=&quot;SQL对接部分&quot;&gt;&lt;/a&gt;SQL对接部分&lt;/h2&gt;&lt;p&gt;先是个类，对接SQL&lt;/p&gt;
&lt;figure class=&quot;highlight java&quot;&gt;&lt;tab</summary>
      
    
    
    
    
    <category term="教程" scheme="https://endlife.1l1.icu/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>艹废了</title>
    <link href="https://endlife.1l1.icu/2022/07/27/%E8%89%B9%E5%BA%9F%E4%BA%86/"/>
    <id>https://endlife.1l1.icu/2022/07/27/%E8%89%B9%E5%BA%9F%E4%BA%86/</id>
    <published>2022-07-27T12:18:42.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<img src="https://resource.huahuo-cn.tk/media/blog/Phigros/云女孩.jpg" />]]></content>
    
    
      
      
    <summary type="html">&lt;img src=&quot;https://resource.huahuo-cn.tk/media/blog/Phigros/云女孩.jpg&quot; /&gt;
</summary>
      
    
    
    
    
    <category term="Phigros" scheme="https://endlife.1l1.icu/tags/Phigros/"/>
    
  </entry>
  
  <entry>
    <title>Java实现SLP(ServerListPing)获取Minecraft服务器信息(Java版)</title>
    <link href="https://endlife.1l1.icu/2022/07/24/Java%E5%AE%9E%E7%8E%B0SLP-ServerListPing-%E8%8E%B7%E5%8F%96Minecraft%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BF%A1%E6%81%AF-Java%E7%89%88-/"/>
    <id>https://endlife.1l1.icu/2022/07/24/Java%E5%AE%9E%E7%8E%B0SLP-ServerListPing-%E8%8E%B7%E5%8F%96Minecraft%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BF%A1%E6%81%AF-Java%E7%89%88-/</id>
    <published>2022-07-24T04:47:12.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<h2 id="SLP原理"><a href="#SLP原理" class="headerlink" title="SLP原理"></a>SLP原理</h2><p><a href="https://wiki.vg/">https://wiki.vg</a>上面有详细说明，发包给Minecraft服务器就行</p><h2 id="实现"><a href="#实现" class="headerlink" title="实现"></a>实现</h2><p>具体代码在下面，感谢猫车车重写JSON解析部分(旧的是zh32做的，JSON解析错误然后就换了阿里的FastJSON)</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> moe.xmcn.example;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> com.alibaba.fastjson.JSON;</span><br><span class="line"><span class="keyword">import</span> com.alibaba.fastjson.JSONObject;</span><br><span class="line"><span class="keyword">import</span> java.io.ByteArrayOutputStream;</span><br><span class="line"><span class="keyword">import</span> java.io.DataInputStream;</span><br><span class="line"><span class="keyword">import</span> java.io.DataOutputStream;</span><br><span class="line"><span class="keyword">import</span> java.io.IOException;</span><br><span class="line"><span class="keyword">import</span> java.io.InputStream;</span><br><span class="line"><span class="keyword">import</span> java.io.InputStreamReader;</span><br><span class="line"><span class="keyword">import</span> java.io.OutputStream;</span><br><span class="line"><span class="keyword">import</span> java.net.InetSocketAddress;</span><br><span class="line"><span class="keyword">import</span> java.net.Socket;</span><br><span class="line"><span class="keyword">import</span> java.util.ArrayList;</span><br><span class="line"><span class="keyword">import</span> java.util.List;</span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@author</span>  XiaMoHuaHuo_CN</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@author</span>  zh32 &lt;zh32 at zh32.de&gt;</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@author</span>  猫车车</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">ServerListPing</span> &#123;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">private</span> InetSocketAddress host;</span><br><span class="line">    <span class="keyword">private</span> <span class="type">int</span> <span class="variable">timeout</span> <span class="operator">=</span> <span class="number">7000</span>;</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">setAddress</span><span class="params">(InetSocketAddress host)</span> &#123;</span><br><span class="line">        <span class="built_in">this</span>.host = host;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">public</span> InetSocketAddress <span class="title function_">getAddress</span><span class="params">()</span> &#123;</span><br><span class="line">        <span class="keyword">return</span> host;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">setTimeout</span><span class="params">(<span class="type">int</span> timeout)</span> &#123;</span><br><span class="line">        <span class="built_in">this</span>.timeout = timeout;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">public</span> <span class="type">int</span> <span class="title function_">getTimeout</span><span class="params">()</span> &#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="built_in">this</span>.timeout;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">public</span> <span class="type">int</span> <span class="title function_">readVarInt</span><span class="params">(DataInputStream in)</span> <span class="keyword">throws</span> IOException &#123;</span><br><span class="line">        <span class="type">int</span> <span class="variable">i</span> <span class="operator">=</span> <span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> <span class="variable">j</span> <span class="operator">=</span> <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="literal">true</span>) &#123;</span><br><span class="line">            <span class="type">int</span> <span class="variable">k</span> <span class="operator">=</span> in.readByte();</span><br><span class="line">            i |= (k &amp; <span class="number">0x7F</span>) &lt;&lt; j++ * <span class="number">7</span>;</span><br><span class="line">            <span class="keyword">if</span> (j &gt; <span class="number">5</span>) <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">RuntimeException</span>(<span class="string">&quot;VarInt too big&quot;</span>);</span><br><span class="line">            <span class="keyword">if</span> ((k &amp; <span class="number">0x80</span>) != <span class="number">128</span>) <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> i;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">writeVarInt</span><span class="params">(DataOutputStream out, <span class="type">int</span> paramInt)</span> <span class="keyword">throws</span> IOException &#123;</span><br><span class="line">        <span class="keyword">while</span> (<span class="literal">true</span>) &#123;</span><br><span class="line">            <span class="keyword">if</span> ((paramInt &amp; <span class="number">0xFFFFFF80</span>) == <span class="number">0</span>) &#123;</span><br><span class="line">                out.writeByte(paramInt);</span><br><span class="line">                <span class="keyword">return</span>;</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            out.writeByte(paramInt &amp; <span class="number">0x7F</span> | <span class="number">0x80</span>);</span><br><span class="line">            paramInt &gt;&gt;&gt;= <span class="number">7</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">fetchData</span><span class="params">()</span> <span class="keyword">throws</span> IOException &#123;</span><br><span class="line"></span><br><span class="line">        <span class="type">Socket</span> <span class="variable">socket</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">Socket</span>();</span><br><span class="line">        OutputStream outputStream;</span><br><span class="line">        DataOutputStream dataOutputStream;</span><br><span class="line">        InputStream inputStream;</span><br><span class="line">        InputStreamReader inputStreamReader;</span><br><span class="line"></span><br><span class="line">        socket.setSoTimeout(<span class="built_in">this</span>.timeout);</span><br><span class="line"></span><br><span class="line">        socket.connect(host, timeout);</span><br><span class="line"></span><br><span class="line">        outputStream = socket.getOutputStream();</span><br><span class="line">        dataOutputStream = <span class="keyword">new</span> <span class="title class_">DataOutputStream</span>(outputStream);</span><br><span class="line"></span><br><span class="line">        inputStream = socket.getInputStream();</span><br><span class="line">        inputStreamReader = <span class="keyword">new</span> <span class="title class_">InputStreamReader</span>(inputStream);</span><br><span class="line"></span><br><span class="line">        <span class="type">ByteArrayOutputStream</span> <span class="variable">b</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">ByteArrayOutputStream</span>();</span><br><span class="line">        <span class="type">DataOutputStream</span> <span class="variable">handshake</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">DataOutputStream</span>(b);</span><br><span class="line">        handshake.writeByte(<span class="number">0x00</span>); <span class="comment">//packet id for handshake</span></span><br><span class="line">        writeVarInt(handshake, <span class="number">4</span>); <span class="comment">//protocol version</span></span><br><span class="line">        writeVarInt(handshake, host.getHostString().length()); <span class="comment">//host length</span></span><br><span class="line">        handshake.writeBytes(host.getHostString()); <span class="comment">//host string</span></span><br><span class="line">        handshake.writeShort(host.getPort()); <span class="comment">//port</span></span><br><span class="line">        writeVarInt(handshake, <span class="number">1</span>); <span class="comment">//state (1 for handshake)</span></span><br><span class="line"></span><br><span class="line">        writeVarInt(dataOutputStream, b.size()); <span class="comment">//prepend size</span></span><br><span class="line">        dataOutputStream.write(b.toByteArray()); <span class="comment">//write handshake packet</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">        dataOutputStream.writeByte(<span class="number">0x01</span>); <span class="comment">//size is only 1</span></span><br><span class="line">        dataOutputStream.writeByte(<span class="number">0x00</span>); <span class="comment">//packet id for ping</span></span><br><span class="line">        <span class="type">DataInputStream</span> <span class="variable">dataInputStream</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">DataInputStream</span>(inputStream);</span><br><span class="line">        <span class="type">int</span> <span class="variable">size</span> <span class="operator">=</span> readVarInt(dataInputStream); <span class="comment">//size of packet</span></span><br><span class="line">        <span class="type">int</span> <span class="variable">id</span> <span class="operator">=</span> readVarInt(dataInputStream); <span class="comment">//packet id</span></span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span> (id == -<span class="number">1</span>) &#123;</span><br><span class="line">            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">IOException</span>(<span class="string">&quot;Premature end of stream.&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span> (id != <span class="number">0x00</span>) &#123; <span class="comment">//we want a status response</span></span><br><span class="line">            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">IOException</span>(<span class="string">&quot;Invalid packetID&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">int</span> <span class="variable">length</span> <span class="operator">=</span> readVarInt(dataInputStream); <span class="comment">//length of json string</span></span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span> (length == -<span class="number">1</span>) &#123;</span><br><span class="line">            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">IOException</span>(<span class="string">&quot;Premature end of stream.&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span> (length == <span class="number">0</span>) &#123;</span><br><span class="line">            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">IOException</span>(<span class="string">&quot;Invalid string length.&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="type">byte</span>[] in = <span class="keyword">new</span> <span class="title class_">byte</span>[length];</span><br><span class="line">        dataInputStream.readFully(in);  <span class="comment">//read json string</span></span><br><span class="line">        <span class="type">String</span> <span class="variable">json</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">String</span>(in);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">        <span class="type">long</span> <span class="variable">now</span> <span class="operator">=</span> System.currentTimeMillis();</span><br><span class="line">        dataOutputStream.writeByte(<span class="number">0x09</span>); <span class="comment">//size of packet</span></span><br><span class="line">        dataOutputStream.writeByte(<span class="number">0x01</span>); <span class="comment">//0x01 for ping</span></span><br><span class="line">        dataOutputStream.writeLong(now); <span class="comment">//time!?</span></span><br><span class="line"></span><br><span class="line">        readVarInt(dataInputStream);</span><br><span class="line">        id = readVarInt(dataInputStream);</span><br><span class="line">        <span class="keyword">if</span> (id == -<span class="number">1</span>) &#123;</span><br><span class="line">            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">IOException</span>(<span class="string">&quot;Premature end of stream.&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span> (id != <span class="number">0x01</span>) &#123;</span><br><span class="line">            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">IOException</span>(<span class="string">&quot;Invalid packetID&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="comment">//read response</span></span><br><span class="line"></span><br><span class="line">        <span class="type">JSONObject</span> <span class="variable">object</span> <span class="operator">=</span> JSON.parseObject(json);</span><br><span class="line">        <span class="type">JSONObject</span> <span class="variable">players</span> <span class="operator">=</span> JSON.parseObject(object.get(<span class="string">&quot;players&quot;</span>).toString());</span><br><span class="line">        <span class="type">JSONObject</span> <span class="variable">description</span> <span class="operator">=</span> JSON.parseObject(object.get(<span class="string">&quot;description&quot;</span>).toString());</span><br><span class="line">        <span class="type">JSONObject</span> <span class="variable">version</span> <span class="operator">=</span> JSON.parseObject(object.get(<span class="string">&quot;version&quot;</span>).toString());</span><br><span class="line">        List&lt;Object&gt; list = <span class="keyword">new</span> <span class="title class_">ArrayList</span>&lt;Object&gt;(JSON.parseArray(String.valueOf(description.get(<span class="string">&quot;extra&quot;</span>))));</span><br><span class="line"></span><br><span class="line">        <span class="type">StringBuilder</span> <span class="variable">Motd</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">StringBuilder</span>();</span><br><span class="line">        <span class="keyword">for</span> (Object o : list) &#123;</span><br><span class="line">            <span class="type">JSONObject</span> <span class="variable">text</span> <span class="operator">=</span> JSON.parseObject(o.toString());</span><br><span class="line">            Motd.append(text.get(<span class="string">&quot;text&quot;</span>));</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span> (object.get(<span class="string">&quot;favicon&quot;</span>).toString() != <span class="literal">null</span>) &#123;</span><br><span class="line">            ServerListPing.Response.setIcon(object.get(<span class="string">&quot;favicon&quot;</span>).toString());</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            ServerListPing.Response.setIcon(<span class="string">&quot;&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        ServerListPing.Response.setPlayerMax(players.get(<span class="string">&quot;max&quot;</span>).toString());</span><br><span class="line">        ServerListPing.Response.setPlayerOnline(players.get(<span class="string">&quot;online&quot;</span>).toString());</span><br><span class="line">        ServerListPing.Response.setProtocol(version.get(<span class="string">&quot;protocol&quot;</span>).toString());</span><br><span class="line">        ServerListPing.Response.setVersion(version.get(<span class="string">&quot;name&quot;</span>).toString());</span><br><span class="line">        ServerListPing.Response.setMOTD(Motd.toString());</span><br><span class="line"></span><br><span class="line">        dataOutputStream.close();</span><br><span class="line">        outputStream.close();</span><br><span class="line">        inputStreamReader.close();</span><br><span class="line">        inputStream.close();</span><br><span class="line">        socket.close();</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * 获取请求结果</span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> <span class="title class_">Response</span> &#123;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">private</span> <span class="keyword">static</span> String player_max;</span><br><span class="line">        <span class="keyword">private</span> <span class="keyword">static</span> String protocol;</span><br><span class="line">        <span class="keyword">private</span> <span class="keyword">static</span> String player_online;</span><br><span class="line">        <span class="keyword">private</span> <span class="keyword">static</span> String version;</span><br><span class="line">        <span class="keyword">private</span> <span class="keyword">static</span> String motd;</span><br><span class="line">        <span class="keyword">private</span> <span class="keyword">static</span> String favicon;</span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">static</span> String <span class="title function_">getPlayerMax</span><span class="params">()</span> &#123;</span><br><span class="line">            <span class="keyword">return</span> Response.player_max;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">static</span> String <span class="title function_">getPlayerOnline</span><span class="params">()</span> &#123;</span><br><span class="line">            <span class="keyword">return</span> Response.player_online;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">static</span> String <span class="title function_">getProtocol</span><span class="params">()</span> &#123;</span><br><span class="line">            <span class="keyword">return</span> Response.protocol;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">static</span> String <span class="title function_">getVersion</span><span class="params">()</span> &#123;</span><br><span class="line">            <span class="keyword">return</span> Response.version;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">static</span> String <span class="title function_">getMOTD</span><span class="params">()</span> &#123;</span><br><span class="line">            <span class="keyword">return</span> Response.motd;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">static</span> String <span class="title function_">getIcon</span><span class="params">()</span> &#123;</span><br><span class="line">            <span class="keyword">return</span> favicon;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 内部变量 设置结果</span></span><br><span class="line">        <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">setPlayerMax</span><span class="params">(String player_max)</span> &#123;</span><br><span class="line">            Response.player_max = player_max;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">setPlayerOnline</span><span class="params">(String player_online)</span> &#123;</span><br><span class="line">            Response.player_online = player_online;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">setProtocol</span><span class="params">(String protocol)</span> &#123;</span><br><span class="line">            Response.protocol = protocol;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">setVersion</span><span class="params">(String version)</span> &#123;</span><br><span class="line">            Response.version = version;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">setMOTD</span><span class="params">(String motd)</span> &#123;</span><br><span class="line">            Response.motd = motd;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">setIcon</span><span class="params">(String favicon)</span> &#123;</span><br><span class="line">            Response.favicon = favicon;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>Maven部分</p><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?xml version=<span class="string">&quot;1.0&quot;</span> encoding=<span class="string">&quot;UTF-8&quot;</span>?&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">project</span> <span class="attr">xmlns</span>=<span class="string">&quot;http://maven.apache.org/POM/4.0.0&quot;</span></span></span><br><span class="line"><span class="tag">         <span class="attr">xmlns:xsi</span>=<span class="string">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span></span></span><br><span class="line"><span class="tag">         <span class="attr">xsi:schemaLocation</span>=<span class="string">&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">modelVersion</span>&gt;</span>4.0.0<span class="tag">&lt;/<span class="name">modelVersion</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="tag">&lt;<span class="name">groupId</span>&gt;</span>moe.xmcn.example<span class="tag">&lt;/<span class="name">groupId</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">artifactId</span>&gt;</span>ServerListPing<span class="tag">&lt;/<span class="name">artifactId</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">version</span>&gt;</span>1.0<span class="tag">&lt;/<span class="name">version</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">build</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">plugins</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">plugin</span>&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">groupId</span>&gt;</span>org.apache.maven.plugins<span class="tag">&lt;/<span class="name">groupId</span>&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">artifactId</span>&gt;</span>maven-compiler-plugin<span class="tag">&lt;/<span class="name">artifactId</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;/<span class="name">plugin</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">plugins</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">build</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="tag">&lt;<span class="name">properties</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">maven.compiler.source</span>&gt;</span>8<span class="tag">&lt;/<span class="name">maven.compiler.source</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">maven.compiler.target</span>&gt;</span>8<span class="tag">&lt;/<span class="name">maven.compiler.target</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">properties</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="tag">&lt;<span class="name">repositories</span>&gt;</span></span><br><span class="line">        </span><br><span class="line">        <span class="tag">&lt;<span class="name">repository</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">id</span>&gt;</span>maven<span class="tag">&lt;/<span class="name">id</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">url</span>&gt;</span>https://maven.aliyun.com/nexus/content/groups/public/<span class="tag">&lt;/<span class="name">url</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">repository</span>&gt;</span></span><br><span class="line">        </span><br><span class="line">    <span class="tag">&lt;/<span class="name">repositories</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="tag">&lt;<span class="name">dependencies</span>&gt;</span></span><br><span class="line"></span><br><span class="line">        <span class="tag">&lt;<span class="name">dependency</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">groupId</span>&gt;</span>com.alibaba<span class="tag">&lt;/<span class="name">groupId</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">artifactId</span>&gt;</span>fastjson<span class="tag">&lt;/<span class="name">artifactId</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">version</span>&gt;</span>2.0.9<span class="tag">&lt;/<span class="name">version</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">dependency</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="tag">&lt;/<span class="name">dependencies</span>&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="tag">&lt;/<span class="name">project</span>&gt;</span></span><br></pre></td></tr></table></figure><h2 id="调用"><a href="#调用" class="headerlink" title="调用"></a>调用</h2><p>先设置服务器地址，类型是java.net.InetSocketAddress</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">InetSocketAddress</span> <span class="variable">isa</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">InetSocketAddress</span>(String host, <span class="type">int</span> port);</span><br><span class="line"><span class="type">ServerListPing</span> <span class="variable">slp</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">ServerListPing</span>();</span><br><span class="line">slp.setAddress(isa);</span><br><span class="line"></span><br><span class="line"><span class="comment">// 也可以手动设置延迟，单位ms，不设置默认是7000</span></span><br><span class="line"><span class="comment">//slp.setTimeout(int timeout);</span></span><br></pre></td></tr></table></figure><p>然后通过ServerListPing.fetchData()方法获得数据</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">slp.fetchData();</span><br></pre></td></tr></table></figure><p>得到数据之后会自动解析，调ServerListPing.Response类获取信息</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 获得服务器版本</span></span><br><span class="line">ServerListPing.Response.getVersion();</span><br><span class="line"></span><br><span class="line"><span class="comment">// 获得服务器协议版本</span></span><br><span class="line">ServerListPing.Response.getProtocol();</span><br><span class="line"></span><br><span class="line"><span class="comment">// 获得服务器在线玩家数量</span></span><br><span class="line">ServerListPing.Response.getPlayerOnline();</span><br><span class="line"></span><br><span class="line"><span class="comment">// 获得服务器最大玩家数量</span></span><br><span class="line">ServerListPing.Response.getPlayerMax();</span><br><span class="line"></span><br><span class="line"><span class="comment">// 获得服务器MOTD</span></span><br><span class="line">ServerListPing.Response.getMOTD();</span><br><span class="line"></span><br><span class="line"><span class="comment">// 获得服务器图标</span></span><br><span class="line">ServerListPing.Response.getIcon();</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;SLP原理&quot;&gt;&lt;a href=&quot;#SLP原理&quot; class=&quot;headerlink&quot; title=&quot;SLP原理&quot;&gt;&lt;/a&gt;SLP原理&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://wiki.vg/&quot;&gt;https://wiki.vg&lt;/a&gt;上面有详细说明，发包给M</summary>
      
    
    
    
    
    <category term="教程" scheme="https://endlife.1l1.icu/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>Mojang又开新坑——Minecraft Legends</title>
    <link href="https://endlife.1l1.icu/2022/07/10/Mojang%E5%8F%88%E5%BC%80%E6%96%B0%E5%9D%91-Minecraft-Legends/"/>
    <id>https://endlife.1l1.icu/2022/07/10/Mojang%E5%8F%88%E5%BC%80%E6%96%B0%E5%9D%91-Minecraft-Legends/</id>
    <published>2022-07-10T14:49:25.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<h2 id="宣传片"><a href="#宣传片" class="headerlink" title="宣传片"></a>宣传片</h2><p><video src="https://resource.huahuo-cn.tk/media/videometa/Minecraft-Legends-AD.mp4" controls="controls" style="width:100%"></video></p><h2 id="个人看法"><a href="#个人看法" class="headerlink" title="个人看法"></a>个人看法</h2><p>看宣传像个自由探索类型的游戏，还是有点期待的<br>不知道到时候卖多少💰<br>便宜的话2023年一出马上买</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;宣传片&quot;&gt;&lt;a href=&quot;#宣传片&quot; class=&quot;headerlink&quot; title=&quot;宣传片&quot;&gt;&lt;/a&gt;宣传片&lt;/h2&gt;&lt;p&gt;&lt;video src=&quot;https://resource.huahuo-cn.tk/media/videometa/Minecraf</summary>
      
    
    
    
    
    <category term="介绍" scheme="https://endlife.1l1.icu/tags/%E4%BB%8B%E7%BB%8D/"/>
    
  </entry>
  
  <entry>
    <title>Bukkit插件—计算服务器TPS</title>
    <link href="https://endlife.1l1.icu/2022/06/05/Bukkit%E6%8F%92%E4%BB%B6%E2%80%94%E8%AE%A1%E7%AE%97%E6%9C%8D%E5%8A%A1%E5%99%A8TPS/"/>
    <id>https://endlife.1l1.icu/2022/06/05/Bukkit%E6%8F%92%E4%BB%B6%E2%80%94%E8%AE%A1%E7%AE%97%E6%9C%8D%E5%8A%A1%E5%99%A8TPS/</id>
    <published>2022-06-05T08:23:42.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>CraftBukkit没内置TPS接口，所以整了个TPS计算</p><h2 id="前置代码"><a href="#前置代码" class="headerlink" title="前置代码"></a>前置代码</h2><p>先新创建个类，比如我这个叫<strong>ServerTPS</strong>，往里面塞计算器</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">ServerTPS</span> <span class="keyword">implements</span> <span class="title class_">Runnable</span> &#123;</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="type">long</span>[] TICKS = <span class="keyword">new</span> <span class="title class_">long</span>[<span class="number">600</span>];</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">static</span> <span class="type">int</span> <span class="variable">TICK_COUNT</span> <span class="operator">=</span> <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">static</span> <span class="type">double</span> <span class="title function_">getTPS</span><span class="params">()</span> &#123;</span><br><span class="line">        <span class="keyword">return</span> getTPS(<span class="number">100</span>);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">static</span> <span class="type">double</span> <span class="title function_">getTPS</span><span class="params">(<span class="type">int</span> ticks)</span> &#123;</span><br><span class="line">        <span class="keyword">if</span> (TICK_COUNT &lt; ticks) &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="number">20.0D</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">int</span> <span class="variable">target</span> <span class="operator">=</span> (TICK_COUNT - <span class="number">1</span> - ticks) % TICKS.length;</span><br><span class="line">        <span class="type">long</span> <span class="variable">elapsed</span> <span class="operator">=</span> System.currentTimeMillis() - TICKS[target];</span><br><span class="line"></span><br><span class="line">        <span class="keyword">return</span> ticks / (elapsed / <span class="number">1000.0D</span>);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">static</span> <span class="type">long</span> <span class="title function_">getElapsed</span><span class="params">(<span class="type">int</span> tickID)</span> &#123;</span><br><span class="line">        <span class="type">long</span> <span class="variable">time</span> <span class="operator">=</span> TICKS[(tickID % TICKS.length)];</span><br><span class="line">        <span class="keyword">return</span> System.currentTimeMillis() - time;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">run</span><span class="params">()</span> &#123;</span><br><span class="line">        TICKS[(TICK_COUNT % TICKS.length)] = System.currentTimeMillis();</span><br><span class="line">        TICK_COUNT += <span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>然后再在主类的**onEnable()**里面调用</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 我这里类名叫ServerTPS，所以用的是new ServerTPS()</span></span><br><span class="line"><span class="comment">// 用的时候注意改成自己的类名</span></span><br><span class="line">Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(<span class="built_in">this</span>, <span class="keyword">new</span> <span class="title class_">ServerTPS</span>(), <span class="number">100L</span>, <span class="number">1L</span>);</span><br></pre></td></tr></table></figure><h2 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h2><p>获得当前TPS</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 记得引入类</span></span><br><span class="line"><span class="keyword">import</span> example.ServerTPS;</span><br><span class="line"></span><br><span class="line">ServerTPS.getTPS();</span><br></pre></td></tr></table></figure><p>获取相对滞后程度</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 记得引入类</span></span><br><span class="line"><span class="keyword">import</span> example.ServerTPS;</span><br><span class="line"></span><br><span class="line">ServerTPS.getElapsed()</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;CraftBukkit没内置TPS接口，所以整了个TPS计算&lt;/p&gt;
&lt;h2 id=&quot;前置代码&quot;&gt;&lt;a href=&quot;#前置代码&quot; class=&quot;headerlink&quot; title=&quot;前置代码&quot;&gt;&lt;/a&gt;前置代码&lt;/h2&gt;&lt;p&gt;先新创建个类，比如我这个叫&lt;strong&gt;Ser</summary>
      
    
    
    
    
    <category term="教程" scheme="https://endlife.1l1.icu/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>本站已改为Waline评论</title>
    <link href="https://endlife.1l1.icu/2022/06/03/%E6%9C%AC%E7%AB%99%E5%B7%B2%E6%94%B9%E4%B8%BAWaline%E8%AF%84%E8%AE%BA/"/>
    <id>https://endlife.1l1.icu/2022/06/03/%E6%9C%AC%E7%AB%99%E5%B7%B2%E6%94%B9%E4%B8%BAWaline%E8%AF%84%E8%AE%BA/</id>
    <published>2022-06-03T02:46:23.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>本站已改为Waline评论，之前的评论数据已迁移<br>注册：<a href="https://comment-service.huahuo-cn.tk/ui/register">点我前往</a><br>测试界面：<a href="https://comment-service.huahuo-cn.tk/">点我前往</a></p><h3 id="效果"><a href="#效果" class="headerlink" title="效果"></a>效果</h3><p class='item-img' data-src='https://resource.huahuo-cn.tk/media/blog/Waline_Demo.png'><img src="https://resource.huahuo-cn.tk/media/blog/Waline_Demo.png" alt="ExampleImage"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;本站已改为Waline评论，之前的评论数据已迁移&lt;br&gt;注册：&lt;a href=&quot;https://comment-service.huahuo-cn.tk/ui/register&quot;&gt;点我前往&lt;/a&gt;&lt;br&gt;测试界面：&lt;a href=&quot;https://comment-servi</summary>
      
    
    
    
    
    <category term="公告" scheme="https://endlife.1l1.icu/tags/%E5%85%AC%E5%91%8A/"/>
    
  </entry>
  
  <entry>
    <title>PHP把无Content-type的文件打印为图像</title>
    <link href="https://endlife.1l1.icu/2022/02/07/PHP%E6%8A%8A%E6%97%A0Content-type%E7%9A%84%E6%96%87%E4%BB%B6%E6%89%93%E5%8D%B0%E4%B8%BA%E5%9B%BE%E5%83%8F/"/>
    <id>https://endlife.1l1.icu/2022/02/07/PHP%E6%8A%8A%E6%97%A0Content-type%E7%9A%84%E6%96%87%E4%BB%B6%E6%89%93%E5%8D%B0%E4%B8%BA%E5%9B%BE%E5%83%8F/</id>
    <published>2022-02-07T10:13:15.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>用了GD库，记得开扩展</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> string url 图片地址</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> string type 图片类型</span></span><br><span class="line"><span class="comment">*/</span></span><br><span class="line"></span><br><span class="line"><span class="variable">$url</span> = <span class="string">&#x27;&#x27;</span>;</span><br><span class="line"><span class="variable">$type</span> = <span class="string">&#x27;&#x27;</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">switch</span> (<span class="variable">$type</span>) &#123;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;png&#x27;</span>:</span><br><span class="line">        <span class="title function_ invoke__">header</span>(<span class="string">&quot;Content-type: image/png&quot;</span>);</span><br><span class="line">        <span class="variable">$im</span> = <span class="title function_ invoke__">imagecreatefrompng</span>(<span class="variable">$url</span>);</span><br><span class="line">        <span class="title function_ invoke__">imagepng</span>(<span class="variable">$im</span>);</span><br><span class="line">        <span class="title function_ invoke__">imagedestroy</span>(<span class="variable">$im</span>);</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;jpeg&#x27;</span>:</span><br><span class="line">        <span class="title function_ invoke__">header</span>(<span class="string">&quot;Content-type: image/jpeg&quot;</span>);</span><br><span class="line">        <span class="variable">$im</span> = <span class="title function_ invoke__">imagecreatefromjpeg</span>(<span class="variable">$url</span>);</span><br><span class="line">        <span class="title function_ invoke__">imagejpeg</span>(<span class="variable">$im</span>);</span><br><span class="line">        <span class="title function_ invoke__">imagedestroy</span>(<span class="variable">$im</span>);</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;webp&#x27;</span>:</span><br><span class="line">        <span class="title function_ invoke__">header</span>(<span class="string">&quot;Content-type: image/webp&quot;</span>);</span><br><span class="line">        <span class="variable">$im</span> = <span class="title function_ invoke__">imagecreatefromwebp</span>(<span class="variable">$url</span>);</span><br><span class="line">        <span class="title function_ invoke__">imagewebp</span>(<span class="variable">$im</span>);</span><br><span class="line">        <span class="title function_ invoke__">imagedestroy</span>(<span class="variable">$im</span>);</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;gif&#x27;</span>:</span><br><span class="line">        <span class="title function_ invoke__">header</span>(<span class="string">&#x27;Content-type: image/gif&#x27;</span>);</span><br><span class="line">        <span class="variable">$im</span> = <span class="title function_ invoke__">imagecreatefromgif</span>(<span class="variable">$url</span>);</span><br><span class="line">        <span class="title function_ invoke__">imagegif</span>(<span class="variable">$im</span>);</span><br><span class="line">        <span class="title function_ invoke__">imagedestroy</span>(<span class="variable">$im</span>);</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;wbmp&#x27;</span>:</span><br><span class="line">        <span class="title function_ invoke__">header</span>(<span class="string">&#x27;Content-type: image/wbmp&#x27;</span>);</span><br><span class="line">        <span class="variable">$im</span> = <span class="title function_ invoke__">imagecreatefromwbmp</span>(<span class="variable">$url</span>);</span><br><span class="line">        <span class="title function_ invoke__">imagewebp</span>(<span class="variable">$im</span>);</span><br><span class="line">        <span class="title function_ invoke__">imagedestroy</span>(<span class="variable">$im</span>);</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;svg&#x27;</span>:</span><br><span class="line">        <span class="title function_ invoke__">header</span>(<span class="string">&#x27;Content-type: image/svg+xml&#x27;</span>);</span><br><span class="line">        <span class="keyword">echo</span> <span class="title function_ invoke__">file_get_contents</span>(<span class="variable">$url</span>);</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">    <span class="keyword">default</span>:</span><br><span class="line">        <span class="title function_ invoke__">http_response_code</span> (<span class="number">503</span>);</span><br><span class="line">        <span class="keyword">echo</span> <span class="title function_ invoke__">json_encode</span>(</span><br><span class="line">            <span class="keyword">array</span>(</span><br><span class="line">                <span class="string">&quot;code&quot;</span> =&gt; <span class="number">503</span>,</span><br><span class="line">                <span class="string">&quot;message&quot;</span> =&gt; <span class="string">&#x27;No set \&#x27;type\&#x27; or \&#x27;type\&#x27; can\&#x27;t identify&#x27;</span></span><br><span class="line">            )</span><br><span class="line">        );</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;用了GD库，记得开扩展&lt;/p&gt;
&lt;figure class=&quot;highlight php&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/spa</summary>
      
    
    
    
    
    <category term="教程" scheme="https://endlife.1l1.icu/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>SkiMino API开发笔记：PHP-cURL一些常用的函数</title>
    <link href="https://endlife.1l1.icu/2022/01/02/SkiMino-API%E5%BC%80%E5%8F%91%E7%AC%94%E8%AE%B0-PHP-cURL%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E7%9A%84%E5%87%BD%E6%95%B0/"/>
    <id>https://endlife.1l1.icu/2022/01/02/SkiMino-API%E5%BC%80%E5%8F%91%E7%AC%94%E8%AE%B0-PHP-cURL%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E7%9A%84%E5%87%BD%E6%95%B0/</id>
    <published>2022-01-02T07:16:22.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>使用PHP快速进行cURL请求<br>包括设置UA,Referer,超时时间等</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> mixed $url 请求地址</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> string $UA UA（可选）</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> string $refer 设置Referer</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> string $timeout 设置超时时长</span></span><br><span class="line"><span class="comment">*/</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">curl</span>(<span class="params"><span class="variable">$url</span>, <span class="variable">$UA</span> = <span class="string">&#x27;User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36 Edg/96.0.1054.53&#x27;</span>, <span class="variable">$refer</span> = <span class="string">&#x27;&#x27;</span>, <span class="variable">$timeout</span> = <span class="number">10</span></span>) </span>&#123;</span><br><span class="line"><span class="variable">$header</span>[] = <span class="string">&quot;Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8&quot;</span>;</span><br><span class="line">    <span class="variable">$header</span>[] = <span class="string">&quot;Accept-Encoding: gzip, deflate, sdch, br&quot;</span>;</span><br><span class="line">    <span class="variable">$header</span>[] = <span class="string">&quot;Accept-Language: zh-CN,zh;q=0.9&quot;</span>;</span><br><span class="line"><span class="variable">$ch</span> = <span class="title function_ invoke__">curl_init</span>();</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_URL, <span class="variable">$url</span>);</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_HTTPHEADER, <span class="variable">$header</span>);</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_USERAGENT, <span class="variable">$UA</span>);</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_REFERER, <span class="variable">$refer</span>);</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_RETURNTRANSFER, <span class="number">1</span>);</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_ENCODING, <span class="string">&#x27;gzip,deflate&#x27;</span>);</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_SSL_VERIFYPEER, <span class="literal">FALSE</span>);</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_SSL_VERIFYHOST, <span class="literal">FALSE</span>);</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_TIMEOUT, <span class="variable">$timeout</span>);</span><br><span class="line"><span class="variable">$output</span> = <span class="title function_ invoke__">curl_exec</span>(<span class="variable">$ch</span>);</span><br><span class="line"><span class="title function_ invoke__">curl_close</span>(<span class="variable">$ch</span>);</span><br><span class="line"><span class="keyword">return</span> <span class="variable">$output</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>使用PHP-cURL获取跳转到的链接</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> mixed $url 短链接（原链接）</span></span><br><span class="line"><span class="comment">*/</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">LocaUrl</span>(<span class="params"><span class="variable">$url</span></span>) </span>&#123;</span><br><span class="line"><span class="variable">$ch</span> = <span class="title function_ invoke__">curl_init</span>();</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_URL, <span class="variable">$url</span>);</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_USERAGENT, <span class="string">&quot;User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36 Edg/96.0.1054.53&quot;</span>); <span class="comment">//UA</span></span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_VERBOSE, <span class="literal">true</span>);</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_HEADER, <span class="literal">true</span>);</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_NOBODY, <span class="literal">true</span>);</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_CUSTOMREQUEST, <span class="string">&#x27;GET&#x27;</span>); <span class="comment">//请求方式</span></span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_RETURNTRANSFER, <span class="literal">true</span>);</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_TIMEOUT, <span class="number">10</span>); <span class="comment">//超时时长</span></span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_AUTOREFERER, <span class="literal">true</span>);</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_FOLLOWLOCATION, <span class="literal">true</span>);</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_SSL_VERIFYPEER, <span class="literal">false</span>);</span><br><span class="line"><span class="title function_ invoke__">curl_setopt</span>(<span class="variable">$ch</span>, CURLOPT_SSL_VERIFYHOST, <span class="literal">false</span>);</span><br><span class="line"><span class="variable">$res</span> = <span class="title function_ invoke__">curl_exec</span>(<span class="variable">$ch</span>);</span><br><span class="line"><span class="variable">$info</span> = <span class="title function_ invoke__">curl_getinfo</span>(<span class="variable">$ch</span>);</span><br><span class="line"><span class="variable">$retURL</span> = <span class="variable">$info</span>[<span class="string">&#x27;url&#x27;</span>];</span><br><span class="line"><span class="title function_ invoke__">curl_close</span>(<span class="variable">$ch</span>);</span><br><span class="line"><span class="keyword">return</span> <span class="variable">$retURL</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;使用PHP快速进行cURL请求&lt;br&gt;包括设置UA,Referer,超时时间等&lt;/p&gt;
&lt;figure class=&quot;highlight php&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;</summary>
      
    
    
    
    
    <category term="笔记" scheme="https://endlife.1l1.icu/tags/%E7%AC%94%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>火绒弹窗拦截提取版</title>
    <link href="https://endlife.1l1.icu/2021/11/27/%E7%81%AB%E7%BB%92%E5%BC%B9%E7%AA%97%E6%8B%A6%E6%88%AA%E6%8F%90%E5%8F%96%E7%89%88/"/>
    <id>https://endlife.1l1.icu/2021/11/27/%E7%81%AB%E7%BB%92%E5%BC%B9%E7%AA%97%E6%8B%A6%E6%88%AA%E6%8F%90%E5%8F%96%E7%89%88/</id>
    <published>2021-11-27T14:22:22.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<h2>下载地址</h2><a href="https://resource.huahuo-cn.tk/drive/DiskShare/PopBlock.zip">PopBlock.zip</a><br />绿包，自行添加注册表等]]></content>
    
    
      
      
    <summary type="html">&lt;h2&gt;下载地址&lt;/h2&gt;
&lt;a href=&quot;https://resource.huahuo-cn.tk/drive/DiskShare/PopBlock.zip&quot;&gt;PopBlock.zip&lt;/a&gt;&lt;br /&gt;
绿包，自行添加注册表等
</summary>
      
    
    
    
    
    <category term="软件资源" scheme="https://endlife.1l1.icu/tags/%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%BA%90/"/>
    
  </entry>
  
  <entry>
    <title>HTML(CSS) Chromium内核浏览器自定义滑动条</title>
    <link href="https://endlife.1l1.icu/2021/11/27/HTML-CSS--Chromium%E5%86%85%E6%A0%B8%E6%B5%8F%E8%A7%88%E5%99%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E6%BB%91%E5%8A%A8%E6%9D%A1/"/>
    <id>https://endlife.1l1.icu/2021/11/27/HTML-CSS--Chromium%E5%86%85%E6%A0%B8%E6%B5%8F%E8%A7%88%E5%99%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E6%BB%91%E5%8A%A8%E6%9D%A1/</id>
    <published>2021-11-27T14:06:15.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<h3>::-webkit-scrollbar</h3>滚动条整体部分，其中的属性有width，height，background，border，border-radius（就和一个块级元素一样）等。其中：width：定义的是纵向滚动条的宽度。不能控制横向滚动条的宽度。height：定义的是横向滚动条的高度。同理不能控制横向滚动条的高度- 一个简单的演示<figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">::-webkit-scrollbar &#123;</span><br><span class="line">            <span class="attribute">background</span>: skyblue;</span><br><span class="line">            <span class="attribute">width</span>: <span class="number">10px</span>;</span><br><span class="line">            <span class="attribute">height</span>: <span class="number">10px</span>;</span><br><span class="line">            <span class="attribute">border</span>:<span class="number">1px</span> <span class="number">#000</span> solid;</span><br><span class="line">            <span class="attribute">border-radius</span>: <span class="number">2px</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>它不仅能控制窗口的滚动条，也能控制标签的滚动条。  <h3>::-webkit-scrollbar-button</h3>滚动条两端的按钮，可以用 display:none 让其不显示，也可以添加背景图片，颜色改变显示效果- 演示<figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">::-webkit-scrollbar-button &#123;</span><br><span class="line">            <span class="attribute">background</span>: red;</span><br><span class="line">            <span class="attribute">border-radius</span>: <span class="number">2px</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3>::-webkit-scrollbar-track</h3>外层轨道，可以用 display:none 让其不显示，也可以添加背景图片，颜色改变显示效果- 演示<figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">::-webkit-scrollbar-track &#123;</span><br><span class="line">         <span class="attribute">border</span>: <span class="number">1px</span> pink solid;   </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3>::-webkit-scrollbar-track-</h3>内层轨道，外层轨道设置了，这个内层轨道也会跟着变<h3>::-webkit-scrollbar-thumb</h3>滚动条里的滑块- 演示<figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">::-webkit-scrollbar-thumb &#123;</span><br><span class="line">            <span class="attribute">background</span>: black;</span><br><span class="line">            <span class="attribute">border</span>: <span class="number">1px</span> white solid;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3>::-webkit-scrollbar-corner</h3>边角<h3>::-webkit-resizer</h3>右下角拖动块]]></content>
    
    
      
      
    <summary type="html">&lt;h3&gt;::-webkit-scrollbar&lt;/h3&gt;
滚动条整体部分，其中的属性有width，height，background，border，border-radius（就和一个块级元素一样）等。
其中：
width：定义的是纵向滚动条的宽度。不能控制横向滚动条的宽度。
h</summary>
      
    
    
    
    
    <category term="教程" scheme="https://endlife.1l1.icu/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>Composer卡在Loading composer repositories with package information的解决方法</title>
    <link href="https://endlife.1l1.icu/2021/10/17/Composer%E5%8D%A1%E5%9C%A8Loading-composer-repositories-with-package-information%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/"/>
    <id>https://endlife.1l1.icu/2021/10/17/Composer%E5%8D%A1%E5%9C%A8Loading-composer-repositories-with-package-information%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/</id>
    <published>2021-10-17T06:31:15.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>主要是中国防火墙太那啥了，执行下面的命令修改拉取信息的源就可以了<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">composer config -g repo.packagist composer https://packagist.phpcomposer.com</span><br></pre></td></tr></table></figure>下面再给出两个源:<br />阿里云<br />https://mirrors.aliyun.com/composer/<br />腾讯云<br />https://mirrors.cloud.tencent.com/composer/</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;主要是中国防火墙太那啥了，执行下面的命令修改拉取信息的源就可以了
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/</summary>
      
    
    
    
    
    <category term="教程" scheme="https://endlife.1l1.icu/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>辟谣:下雨天使用手机会吸引雷电</title>
    <link href="https://endlife.1l1.icu/2021/09/21/%E8%BE%9F%E8%B0%A3-%E4%B8%8B%E9%9B%A8%E5%A4%A9%E4%BD%BF%E7%94%A8%E6%89%8B%E6%9C%BA%E4%BC%9A%E5%90%B8%E5%BC%95%E9%9B%B7%E7%94%B5/"/>
    <id>https://endlife.1l1.icu/2021/09/21/%E8%BE%9F%E8%B0%A3-%E4%B8%8B%E9%9B%A8%E5%A4%A9%E4%BD%BF%E7%94%A8%E6%89%8B%E6%9C%BA%E4%BC%9A%E5%90%B8%E5%BC%95%E9%9B%B7%E7%94%B5/</id>
    <published>2021-09-21T11:58:00.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>打雷时在室内玩手机一般是没有危险的，需要注意远离窗户。<br /><p>现在的建筑物一般来说都是装有避雷针等避雷装置的。雷电被避雷针直接传导到地面，所以在屋内玩手机不会有危险。<br /><br>手机电子元件都非常微小，手机内的电路依靠着一块电池来驱动，接收的是微弱的无线电波，然后电路中产生比较小的电流来工作。手机使用的无线电波的强度只有雷电电场强度的几十万分之一，在雷电面前，手机至多相当于大象面前的一只蚂蚁，不会改变雷电的主意。此外，手中握着的几厘米长的手机也不会让使用者的高度增高、像避雷针吸引雷而增加雷击的风险。<br>有的说法认为手机还会去主动“勾引”雷电，因为手机使用的电磁波会让空气发生电离，增加空气的导电性，吸引雷电选择路过自己周围的空气。这也并不会发生，理由除了刚才提到的手机的无线电波能量太低外，手机本身使用的电磁波波段也不具备影响空气导电性的能力。一般来说，电磁波的频率越高，电离作用就越强。频率很高的宇宙射线对空气有很强的电离作用，太阳紫外线也可以使空气电离产生臭氧。而比紫外线频率略低的可见光就做不到这一点了，否则，就会有 “手电筒引雷”的新闻了。手机无线电波的频率更低。在电离空气方面，它只是个打酱油的。<br>在美国，面对媒体关于“手机与雷电亲密接触”的不断报道，美国国家海洋和大气管理局的专家于2006年曾公开表示：手机和小金属物体都不会吸引雷电，人们在打手机时被雷电击中只是因为他们在错误的时间站在了错误的地点。<p></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;打雷时在室内玩手机一般是没有危险的，需要注意远离窗户。&lt;br /&gt;

&lt;p&gt;现在的建筑物一般来说都是装有避雷针等避雷装置的。雷电被避雷针直接传导到地面，所以在屋内玩手机不会有危险。&lt;br /&gt;&lt;br&gt;手机电子元件都非常微小，手机内的电路依靠着一块电池来驱动，接收的是微弱的无</summary>
      
    
    
    
    
    <category term="科普" scheme="https://endlife.1l1.icu/tags/%E7%A7%91%E6%99%AE/"/>
    
  </entry>
  
  <entry>
    <title>一键激活Windows</title>
    <link href="https://endlife.1l1.icu/2021/09/10/%E4%B8%80%E9%94%AE%E6%BF%80%E6%B4%BBWindows/"/>
    <id>https://endlife.1l1.icu/2021/09/10/%E4%B8%80%E9%94%AE%E6%BF%80%E6%B4%BBWindows/</id>
    <published>2021-09-10T13:03:12.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>直接运行下面的bat，一键激活Windows:<br /><a href="//repo.huahuo-cn.tk/一键激活Windows.bat">https://repo.huahuo-cn.tk/一键激活Windows.bat</a class='item-img' data-src='//i.huahuo-cn.tk/windowsopen.png'><img src="//i.huahuo-cn.tk/windowsopen.png"/></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;
直接运行下面的bat，一键激活Windows:&lt;br /&gt;
&lt;a href=&quot;//repo.huahuo-cn.tk/一键激活Windows.bat&quot;&gt;https://repo.huahuo-cn.tk/一键激活Windows.bat&lt;/a class=&#39;item-img</summary>
      
    
    
    
    
    <category term="Windows" scheme="https://endlife.1l1.icu/tags/Windows/"/>
    
  </entry>
  
  <entry>
    <title>Windows默认头像</title>
    <link href="https://endlife.1l1.icu/2021/08/11/Windows%E9%BB%98%E8%AE%A4%E5%A4%B4%E5%83%8F/"/>
    <id>https://endlife.1l1.icu/2021/08/11/Windows%E9%BB%98%E8%AE%A4%E5%A4%B4%E5%83%8F/</id>
    <published>2021-08-11T05:31:32.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p>因为今天找不到默认头像了，但是网上没有，所以就给搬出来了<br /><br>标准(User.png):<br /><br class='item-img' data-src='//i.huahuo-cn.tk/Windows/user.png'><img src="//i.huahuo-cn.tk/Windows/user.png"/><br>192×192(User-192.png):<br /><br class='item-img' data-src='//i.huahuo-cn.tk/Windows/user-192.png'><img src="//i.huahuo-cn.tk/Windows/user-192.png"/><br>48×48(User-48.png):<br /><br class='item-img' data-src='//i.huahuo-cn.tk/Windows/user-48.png'><img src="//i.huahuo-cn.tk/Windows/user-48.png"/><br>40×40(User-40.png):<br /><br class='item-img' data-src='//i.huahuo-cn.tk/Windows/user-40.png'><img src="//i.huahuo-cn.tk/Windows/user-40.png"/><br>32×32(User-32.png):<br /><br class='item-img' data-src='//i.huahuo-cn.tk/Windows/user-32.png'><img src="//i.huahuo-cn.tk/Windows/user-32.png"/></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;因为今天找不到默认头像了，但是网上没有，所以就给搬出来了&lt;br /&gt;&lt;br&gt;标准(User.png):&lt;br /&gt;&lt;br class=&#39;item-img&#39; data-src=&#39;//i.huahuo-cn.tk/Windows/user.png&#39;&gt;&lt;img src=&quot;//i.</summary>
      
    
    
    
    
    <category term="收集录" scheme="https://endlife.1l1.icu/tags/%E6%94%B6%E9%9B%86%E5%BD%95/"/>
    
  </entry>
  
  <entry>
    <title>Jetbrains系列无限重置</title>
    <link href="https://endlife.1l1.icu/2021/08/04/Jetbrains%E7%B3%BB%E5%88%97%E6%97%A0%E9%99%90%E9%87%8D%E7%BD%AE/"/>
    <id>https://endlife.1l1.icu/2021/08/04/Jetbrains%E7%B3%BB%E5%88%97%E6%97%A0%E9%99%90%E9%87%8D%E7%BD%AE/</id>
    <published>2021-08-04T13:25:00.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<h1>声明</h1><p>不要将其用于非法用途和无休止地滥用</p><h2>支持的Jetbrains系列</h2><p><b>IntelliJ IDEA<br />AppCode<br />CLion<br />DataGrip<br />GoLand<br />PhpStorm<br />PyCharm<br />Rider<br />RubyMine<br />WebStorm</b></p><h1>安装</h1><p>首先是一套操作选择试用30天，进到主界面点击Plugins,然后添加第三方插件仓库<br />地址:https://plugins.zhile.io<br / class='item-img' data-src='https://i.huahuo-cn.tk/Jetbrains-A.png'><img src="https://i.huahuo-cn.tk/Jetbrains-A.png"/><br / class='item-img' data-src='https://i.huahuo-cn.tk/Jetbrains-B.png'><img src="https://i.huahuo-cn.tk/Jetbrains-B.png"/><br />搜索插件<b>IDE Eval Reset</b>,然后安装,安装完成重启即可<br / class='item-img' data-src='https://i.huahuo-cn.tk/Jetbrains-C.png'><img src="https://i.huahuo-cn.tk/Jetbrains-C.png"/></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1&gt;声明&lt;/h1&gt;
&lt;p&gt;不要将其用于非法用途和无休止地滥用&lt;/p&gt;
&lt;h2&gt;支持的Jetbrains系列&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;IntelliJ IDEA&lt;br /&gt;
AppCode&lt;br /&gt;
CLion&lt;br /&gt;
DataGrip&lt;br /&gt;
GoLand&lt;br /&gt;</summary>
      
    
    
    
    
    <category term="教程" scheme="https://endlife.1l1.icu/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>给电脑的QQ/TIM/微信装防撤回</title>
    <link href="https://endlife.1l1.icu/2021/07/23/%E7%BB%99%E7%94%B5%E8%84%91%E7%9A%84QQ-TIM-%E5%BE%AE%E4%BF%A1%E8%A3%85%E9%98%B2%E6%92%A4%E5%9B%9E/"/>
    <id>https://endlife.1l1.icu/2021/07/23/%E7%BB%99%E7%94%B5%E8%84%91%E7%9A%84QQ-TIM-%E5%BE%AE%E4%BF%A1%E8%A3%85%E9%98%B2%E6%92%A4%E5%9B%9E/</id>
    <published>2021-07-23T08:59:27.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<h1>准备</h1><p>RevokeMsgPatcher<br />下载地址:<a href="https://github.com/huiyadanli/RevokeMsgPatcher/releases">https://github.com/huiyadanli/RevokeMsgPatcher/releases</a></p><h1>使用</h1><p>此工具会自动检测已安装的程序，选择对应程序<br / class='item-img' data-src='https://i.huahuo-cn.tk/fch.png'><img src="https://i.huahuo-cn.tk/fch.png"/></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1&gt;准备&lt;/h1&gt;
&lt;p&gt;RevokeMsgPatcher&lt;br /&gt;
下载地址:&lt;a href=&quot;https://github.com/huiyadanli/RevokeMsgPatcher/releases&quot;&gt;https://github.com/huiyadanli/R</summary>
      
    
    
    
    
    <category term="教程" scheme="https://endlife.1l1.icu/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>这个解压网站我能玩一整天</title>
    <link href="https://endlife.1l1.icu/2021/07/14/%E8%BF%99%E4%B8%AA%E8%A7%A3%E5%8E%8B%E7%BD%91%E7%AB%99%E6%88%91%E8%83%BD%E7%8E%A9%E4%B8%80%E6%95%B4%E5%A4%A9/"/>
    <id>https://endlife.1l1.icu/2021/07/14/%E8%BF%99%E4%B8%AA%E8%A7%A3%E5%8E%8B%E7%BD%91%E7%AB%99%E6%88%91%E8%83%BD%E7%8E%A9%E4%B8%80%E6%95%B4%E5%A4%A9/</id>
    <published>2021-07-14T07:21:09.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p><a href="https://aidn.jp/mikutap/">https://aidn.jp/mikutap/</a><br />这个解压网站我能玩一整天<br / class='item-img' data-src='https://i.huahuo-cn.tk/Mikutap.png'><img src="https://i.huahuo-cn.tk/Mikutap.png"/><br / class='item-img' data-src='https://i.huahuo-cn.tk/Mikutap.gif'><img src="https://i.huahuo-cn.tk/Mikutap.gif"/><br /></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;a href=&quot;https://aidn.jp/mikutap/&quot;&gt;https://aidn.jp/mikutap/&lt;/a&gt;&lt;br /&gt;
这个解压网站我能玩一整天&lt;br / class=&#39;item-img&#39; data-src=&#39;https://i.huahuo-cn.tk</summary>
      
    
    
    
    
    <category term="娱乐" scheme="https://endlife.1l1.icu/tags/%E5%A8%B1%E4%B9%90/"/>
    
  </entry>
  
  <entry>
    <title>Minecraft CMI插件白嫖</title>
    <link href="https://endlife.1l1.icu/2021/07/03/Minecraft-CMI%E6%8F%92%E4%BB%B6%E7%99%BD%E5%AB%96/"/>
    <id>https://endlife.1l1.icu/2021/07/03/Minecraft-CMI%E6%8F%92%E4%BB%B6%E7%99%BD%E5%AB%96/</id>
    <published>2021-07-03T08:12:53.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<h1>免责声明</h1><p>本贴提供的资源来自第三方;<br/>请支持正版!在本贴下载的内容本人概不负责。</p><h1>下载地址</h1><p><a href="http://repo.huahuo-cn.tk/CMI8.0.10.0.jar">http://repo.huahuo-cn.tk/CMI8.0.10.0.jar</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1&gt;免责声明&lt;/h1&gt;
&lt;p&gt;本贴提供的资源来自第三方;&lt;br/&gt;
请支持正版!在本贴下载的内容本人概不负责。&lt;/p&gt;
&lt;h1&gt;下载地址&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;http://repo.huahuo-cn.tk/CMI8.0.10.0.jar&quot;&gt;http://rep</summary>
      
    
    
    
    
    <category term="Minecraft" scheme="https://endlife.1l1.icu/tags/Minecraft/"/>
    
  </entry>
  
  <entry>
    <title>使用Vercel免费搭建网站</title>
    <link href="https://endlife.1l1.icu/2021/04/30/%E4%BD%BF%E7%94%A8Vercel%E6%90%AD%E5%BB%BA%E7%BD%91%E7%AB%99/"/>
    <id>https://endlife.1l1.icu/2021/04/30/%E4%BD%BF%E7%94%A8Vercel%E6%90%AD%E5%BB%BA%E7%BD%91%E7%AB%99/</id>
    <published>2021-04-30T15:48:30.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<h1>准备工作</h1><p>准备所需要的工具:<br /><b>GitHub账号<br />Vercel账号</b></p><h1>开始</h1><p>访问GitHub官网:<br /><a href="//github.com">https://github.com</a><br />点击右上角的"Login&nbsp;in"<br / class='item-img' data-src='https://z3.ax1x.com/2021/05/08/gGvlYq.png'><img src="https://z3.ax1x.com/2021/05/08/gGvlYq.png" /><br />然后输入账户名(一般是你的GitHub名)和密码登录<br />在主界面左上区域点击"New"(或者访问<a href="//github.com/new">https://github.com/new</a>)创建一个储存库<br / class='item-img' data-src='https://z3.ax1x.com/2021/05/08/gGvKTs.png'><img src="https://z3.ax1x.com/2021/05/08/gGvKTs.png" /><br />储存库名随便填，建议规范命名，然后点击"Create repository"创建(在最下面)<br / class='item-img' data-src='https://z3.ax1x.com/2021/05/08/gGvESf.png'><img src="https://z3.ax1x.com/2021/05/08/gGvESf.png" /><br />然后访问Vercel官网:<br /><a href="//vercel.com">https://vercel.com</a><br />滑到最下面，点击黑色的GitHub按键，注册Vercel<br / class='item-img' data-src='https://z3.ax1x.com/2021/05/08/gGvZ6S.png'><img src="https://z3.ax1x.com/2021/05/08/gGvZ6S.png"><br />然后点击"New Project"开始一个新项目<br />理论上来说，Vercel第一次使用会自动进入新项目界面<br / class='item-img' data-src='https://z3.ax1x.com/2021/05/08/gGvkfP.png'><img src="https://z3.ax1x.com/2021/05/08/gGvkfP.png" /><br />在此界面选择刚才创建的储存库(如果没有请检查你是否授权了Vercel)<br / class='item-img' data-src='https://z3.ax1x.com/2021/05/08/gGvFYt.png'><img src="https://z3.ax1x.com/2021/05/08/gGvFYt.png" /><br />然后会进入部署内容界面。我们直接"Continue"全部选择部署<br / class='item-img' data-src='https://z3.ax1x.com/2021/05/08/gGveOg.png'><img src="https://z3.ax1x.com/2021/05/08/gGveOg.png" /><br />然后点击"Select"确定后会进入选项卡，我们不用管，直接点"Deploy"开始部署<br / class='item-img' data-src='https://z3.ax1x.com/2021/05/08/gGvVl8.png'><img src="https://z3.ax1x.com/2021/05/08/gGvVl8.png" /><br / class='item-img' data-src='https://z3.ax1x.com/2021/05/08/gGvuwj.png'><img src="https://z3.ax1x.com/2021/05/08/gGvuwj.png" /><br />然后我们就会进入部署界面，不久就会自动部署完毕了<br / class='item-img' data-src='https://z3.ax1x.com/2021/05/08/gGvnmQ.png'><img src="https://z3.ax1x.com/2021/05/08/gGvnmQ.png" />之后修改文件只需要修改GitHub上的文件，Vercel会自动更新网站</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1&gt;准备工作&lt;/h1&gt;
&lt;p&gt;准备所需要的工具:&lt;br /&gt;
&lt;b&gt;GitHub账号&lt;br /&gt;
Vercel账号&lt;/b&gt;&lt;/p&gt;
&lt;h1&gt;开始&lt;/h1&gt;
&lt;p&gt;访问GitHub官网:&lt;br /&gt;
&lt;a href=&quot;//github.com&quot;&gt;https://github.c</summary>
      
    
    
    
    
    <category term="教程" scheme="https://endlife.1l1.icu/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>Git教程</title>
    <link href="https://endlife.1l1.icu/2021/04/02/Git%E6%95%99%E7%A8%8B/"/>
    <id>https://endlife.1l1.icu/2021/04/02/Git%E6%95%99%E7%A8%8B/</id>
    <published>2021-04-02T08:26:15.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<img src="https://z3.ax1x.com/2021/04/02/cmybiF.png" /><h1>安装</h1><p>首先安装Git<br />Git官网：<a href="http://git-scm.com/">http://git-scm.com/</a><br />一路Next安装即可。<br />然后你的右键菜单会多出下面两个按键：<br /><b>Git GUI Here<br />Git Bash Here</b></p><h1>配置Git</h1><p>我们先在电脑里找一块地方存放本地仓库(创建文件夹),然后在文件夹里右键点击<b>Git Bash Here</b>进入Git命令行，如下<br / class='item-img' data-src='https://z3.ax1x.com/2021/04/02/cm6VsI.png'><img src="https://z3.ax1x.com/2021/04/02/cm6VsI.png" /><br />为了保险起见，我们先执行git init命令:<br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git init</span><br></pre></td></tr></table></figure><br / class='item-img' data-src='https://z3.ax1x.com/2021/04/02/cm6FRH.png'><img src="https://z3.ax1x.com/2021/04/02/cm6FRH.png" /><br />为了把本地的仓库传到github，还需要配置ssh key。<br />在本地创建ssh key的命令:<br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ ssh-keygen -t rsa -C &quot;&amp;lt;你注册github的邮箱&amp;gt;&quot;</span><br></pre></td></tr></table></figure><br />直接点回车，说明会在默认文件id_rsa上生成ssh key。 <br />然后系统要求输入密码，直接按回车表示不设密码,重复密码时也是直接回车，之后提示你ssh key已经生成成功。<br / class='item-img' data-src='https://z3.ax1x.com/2021/04/02/cm6iJe.png'><img src="https://z3.ax1x.com/2021/04/02/cm6iJe.png" /><br />然后我们进入提示的地址下查看ssh key文件。 地址是<b>C:\Users\<电脑用户名>\.ssh</b>,比如<b>C:\Users\Administrator\.ssh</b>(注：部分电脑将&quot;Users&quot;文件夹显示为&quot;用户&quot;文件夹)<br />用记事本等软件打开<b>id_rsa.pub</b>，复制里面的key。里面的key是一对看不懂的字符数字组合，不用管它，直接复制。<br / class='item-img' data-src='https://z3.ax1x.com/2021/04/02/cm6kzd.png'><img src="https://z3.ax1x.com/2021/04/02/cm6kzd.png" /><br />登录Github后打开<a href="https://github.com/settings/keys">https://github.com/settings/keys</a>，<b>点击New SSH Key</b>，title随便填，粘贴key。<br />验证是否成功，在Git Bash输入：<br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ ssh -T git@github.com</span><br></pre></td></tr></table></figure><br />回车就会看到：Hi &lt;Github名&gt;! You’ve successfully authenticated, but GitHub does not provide shell access。这就表示已成功连上github。<br / class='item-img' data-src='https://z3.ax1x.com/2021/04/02/cm6ZLt.png'><img src="https://z3.ax1x.com/2021/04/02/cm6ZLt.png" /><br />接下来我们要做的就是把本地仓库传到github上去，在此之前还需要设置username和email，因为github每次commit都会记录他们<br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ git config --global user.name &quot;&amp;lt;Github名称&amp;gt;&quot;</span><br><span class="line">$ git config --global user.email &quot;&amp;lt;你注册github的邮箱&amp;gt;&quot;</span><br></pre></td></tr></table></figure><br / class='item-img' data-src='https://z3.ax1x.com/2021/04/02/cm6EQA.png'><img src="https://z3.ax1x.com/2021/04/02/cm6EQA.png" /><br />进入要上传的仓库，右键git bash，添加远程地址:<br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ git remote add origin &amp;lt;Github仓库ssh地址&amp;gt;</span><br><span class="line">$ git push origin &amp;lt;Github仓库分支，默认master&amp;gt;</span><br></pre></td></tr></table></figure>然后在命令行输入一下命令:<br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$ git add &amp;lt;要上传的文件名称，全部请填*&amp;gt;</span><br><span class="line">$ git ci -m &quot;&amp;lt;上传描述&amp;gt;&quot;</span><br><span class="line">git push命令会将本地仓库推送到远程服务器。</span><br><span class="line">git pull命令则相反。</span><br></pre></td></tr></table></figure><br />注：首次提交，先git pull下，修改完代码后，使用git status可以查看文件的差别，使用git add 添加要commit的文件。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;img src=&quot;https://z3.ax1x.com/2021/04/02/cmybiF.png&quot; /&gt;
&lt;h1&gt;安装&lt;/h1&gt;
&lt;p&gt;首先安装Git&lt;br /&gt;
Git官网：&lt;a href=&quot;http://git-scm.com/&quot;&gt;http://git-scm.com/</summary>
      
    
    
    
    
    <category term="教程" scheme="https://endlife.1l1.icu/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>[原创][MCBBS]CatServer小型整合服务端</title>
    <link href="https://endlife.1l1.icu/2021/03/27/%E5%8E%9F%E5%88%9B-MCBBS-CatServer%E5%B0%8F%E5%9E%8B%E6%95%B4%E5%90%88%E6%9C%8D%E5%8A%A1%E7%AB%AF/"/>
    <id>https://endlife.1l1.icu/2021/03/27/%E5%8E%9F%E5%88%9B-MCBBS-CatServer%E5%B0%8F%E5%9E%8B%E6%95%B4%E5%90%88%E6%9C%8D%E5%8A%A1%E7%AB%AF/</id>
    <published>2021-03-27T10:28:10.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<div class="https://www.mcbbs.net/typeoption"><table summary="https://www.mcbbs.net/分类信息" cellpadding="0" cellspacing="0" class="https://www.mcbbs.net/cgtl mbm"><caption>"服务端整合包"</caption><tbody><tr><th>中文名称:</th><td>CatServer小型整合服务端 </td></tr><tr><th>服务端类型:</th><td>其他&nbsp; </td></tr><tr><th>来源:</th><td>原创  </td></tr><tr><th>最后更新:</th><td>2021-02-07 </td></tr><tr><th>适用版本:</th><td>1.12.2&nbsp; </td></tr><tr><th>语言支持:</th><td>繁體/正體中文&nbsp;简体中文&nbsp;English&nbsp; </td></tr><tr><th>包含内容:</th><td>Vault Hat MiaoChat EssentialsX等多个插件 </td></tr><tr><th>下载地址:</th><td><a href="https://www.mcbbs.net/thread-1151144-1-1.html" target="_blank">https://www.mcbbs.net/thread-1151144-1-1.html</a> </td></tr></tbody></table></div class='item-img' data-src='https://z3.ax1x.com/2021/04/02/cmyTaT.jpg'><img src="https://z3.ax1x.com/2021/04/02/cmyTaT.jpg" /><br /><h1>声明</h1><p><font color="red"><b>本整合包属于本人自制，转载请注明出处，严禁倒卖，也请您不要相信倒卖者，盗用后果自负</b></font></p><h1>为什么用CatServer服务端做整合</h1><p><font color="DarkOrange">CatServer</font>在服务端优化/插件支持/mod优化方面领先于许多服务端，选择<font color="DarkOrange">CatServer</font>做整合可以给大家带来更好的体验<br /><font color="DarkOrange">CatServer</font>支持添加<b>Bukkit，Spigot，BungeeCord</b>等<b>多种服务端</b>的插件，方便日后添加插件</p><h1>介绍</h1><p>这个服务端可以用于制作一些生存服/建筑服/mod服等，服务端较为小型，未添加mod，有需要添加的请自行添加<br />服务端不提供主城地图，您可以自行搜索添加<br /><b>特色</b><br />支持表情[<font color="Lime">√</font>]<br />支持多世界[<font color="Lime">√</font>]<br />TAB[<font color="Lime">√</font>]<br />动态TAB[<font color="Lime">√</font>]<br />计分板[<font color="Lime">√</font>]<br />自定义聊天[<font color="Lime">√</font>]<br />彩色聊天[<font color="Lime">√</font>]<br />支持forge[<font color="Lime">√</font>]<br />彩色MOTD[<font color="Lime">√</font>]</p><h1>服务端插件截图</h1 class='item-img' data-src='https://z3.ax1x.com/2021/04/02/cm6wYF.png'><img src="https://z3.ax1x.com/2021/04/02/cm6wYF.png" /><br /><span>↑↑↑插件截图↑↑↑</span><h1>开服证明截图</h1 class='item-img' data-src='https://z3.ax1x.com/2021/04/02/cm6dFU.png'><img src="https://z3.ax1x.com/2021/04/02/cm6dFU.png" /><br /><span>↑↑↑开服证明↑↑↑</span><h1>插件下载</h1><p><a href="https://www.mcbbs.net/thread-631240-1-1.html">MiaoChat</a><br /><a href="https://www.mcbbs.net/thread-1016455-1-1.html">Multiverse-Core</a><br /><a href="https://www.mcbbs.net/thread-633543-1-1.html">ShendBoard</a><br /><a href="https://www.spigotmc.org/resources/1-7-x-1-16-5-tab-free-version.57806/">TAB</a><br /><a href="https://www.spigotmc.org/resources/vault.34315/">Vault</a><br /><a href="https://www.spigotmc.org/resources/randommotd.67472/">RandomMOTD</a><br /><a href="https://www.spigotmc.org/resources/placeholderapi.6245/">PlaceholderAPI</a><br /><a href="https://www.mcbbs.net/thread-847859-1-1.html">CatSeedLogin</a><br /><a href="https://www.mcbbs.net/thread-619883-1-1.html">EssentialsX</a><br /><a href="https://www.spigotmc.org/resources/protocollib.1997/">ProtocolLib</a><br /><a href="https://www.mcbbs.net/thread-1048988-1-1.html">Hat</a><br /><a href="https://www.mcbbs.net/thread-1149005-1-1.html">McemojiReload</a></p><h1>插件配置&注意事项&插件附件</h1><p><b>[自制]TAB动态动画：<br /><a href="https://www.mcbbs.net/forum.php?mod=attachment&amp;aid=MTc2MTgyNnw5MDc5NzNkNnwxNjE3MzU1NDAyfDI4Mjk0NTl8MTE1MTE0NA%3D%3D" class="attach-download-link" onclick="return attach_download_ctrl(this)" target="_blank">animations.yml</a> (5.31 KB)<br />对表情插件的注意事项:<br />1.此插件需要材质包作为前置，若无材质则无法修改和发送表情<br />2.表情资源包可以在原帖下载后修改</b></p><h1>可选插件</h1><p><a href="https://www.mcbbs.net/thread-1023597-1-1.html">ViaVersion</a><br /><a href="https://www.mcbbs.net/thread-786587-1-1.html">VexView</a><br /><a href="https://www.vexview.top/">VexView官网</a></p><h1>没人看的更新记录</h1><p><font color="blue"><b>同一天修改的用空格隔开</b></font><br /><b>2021-01-10:<font color="DarkOrange">首次发布 修改亿点点排版问题 增加插件下载 修复排版,更新资源,添加声明</font><br />2021-01-16:<font color="DarkOrange">修改排版,加入新内容,更新整合包加入MV插件</font><br />2021-01-17:<font color="DarkOrange">更新整合包加入McemojiReload插件</font><br />2021-01-24:<font color="DarkOrange">更新开服批处理</font><br />2021-01-28:<font color="DarkOrange">全面更新排版</font></b></p><h1>下载地址</h1><p><b><a href="http://repo.huahuo-cn.tk/CatServer小型整合服务端.7z">http://repo.huahuo-cn.tk/CatServer小型整合服务端.7z</a></b></p>]]></content>
    
    
      
      
    <summary type="html">&lt;div class=&quot;https://www.mcbbs.net/typeoption&quot;&gt;
&lt;table summary=&quot;https://www.mcbbs.net/分类信息&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;https://ww</summary>
      
    
    
    
    
    <category term="Minecraft" scheme="https://endlife.1l1.icu/tags/Minecraft/"/>
    
  </entry>
  
  <entry>
    <title>[原创][MCBBS]从零编写自己的开服批处理--轻松开服</title>
    <link href="https://endlife.1l1.icu/2021/03/27/%E5%8E%9F%E5%88%9B-MCBBS-%E4%BB%8E%E9%9B%B6%E7%BC%96%E5%86%99%E8%87%AA%E5%B7%B1%E7%9A%84%E5%BC%80%E6%9C%8D%E6%89%B9%E5%A4%84%E7%90%86-%E8%BD%BB%E6%9D%BE%E5%BC%80%E6%9C%8D/"/>
    <id>https://endlife.1l1.icu/2021/03/27/%E5%8E%9F%E5%88%9B-MCBBS-%E4%BB%8E%E9%9B%B6%E7%BC%96%E5%86%99%E8%87%AA%E5%B7%B1%E7%9A%84%E5%BC%80%E6%9C%8D%E6%89%B9%E5%A4%84%E7%90%86-%E8%BD%BB%E6%9D%BE%E5%BC%80%E6%9C%8D/</id>
    <published>2021-03-27T09:35:36.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<p class='item-img' data-src='https://z3.ax1x.com/2021/04/02/cmyqG4.png'><img src="https://z3.ax1x.com/2021/04/02/cmyqG4.png" /><br /></p><h1>前言</h1><p>由于批处理文件的命令非常奇怪，而搜索的用法却总是不尽人意，于是，本人决定着手写一篇基础开服批处理编写教程，方便各位新人轻松开服。<br /><font color="red">注意：编辑bat时请使用<i><u>ANSI</u></i>编码，否则部分内容将出现报错、乱码等问题，甚至无法启动</font></p><h1>第一章 基础知识</h1><p>在开始之前，我们要了解用得到的内容。<br /><font color="blue"><b>@echo</b></font><br />这是一个回执的命令，它用来控制控制台的回执。<br /><font color="blue"><b>echo</b></font><br />这是一个回执的命令。它能在控制台中添加一个回执。<br /><font color="blue"><b>set</b></font><br />这是一个设置变量的命令。这个命令可以用来优化Java参数。<br /><font color="blue"><b>goto</b></font><br />跳转命令。多用于崩溃自重启。<br /><font color="blue"><b>Java</b></font><br />调起Java进程。开服必备命令。<br /><font color="blue"><b>title</b></font><br />这是一个标题命令。设置控制台的窗口标题。<br /><font color="blue"><b>color</b></font><br />这是一个颜色命令。用于设置控制台背景与文字的颜色。<br /><font color="blue"><b>timeout</b></font><br />这是一个等待命令。以秒为单位。这个命令用于自重启等待。<br /><font color="blue"><b>choice</b></font><br />同上,这是一个等待命令。以秒为单位。这个命令用于自重启等待。</p><h1>第二章 初步启航</h1><p>本章开始正式教学。如果还有不懂，建议先消化第一章的内容。<br />开服最简单的方式就是添加Java参数。如下所示：<br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">java -Xms&amp;lt;最小内存&amp;gt; -Xmx&amp;lt;最大内存&amp;gt; -jar &amp;lt;开服核心名&amp;gt;</span><br></pre></td></tr></table></figure><br />但是这样似乎过于简陋。对于我们，一定想进行优化和个性化。<br />在“java -Xms&lt;最小内存&gt; -Xmx&lt;最大内存&gt; -jar &lt;开服核心名&gt;”中，如果使用高级Java参数，就会导致修改不方便，或者导致误删等问题。那么，我们用set命令来解决。<br />set命令可以设置变量，那么我们只要设置+调用变量，即可轻松解决问题。如下所示：<br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">set Xms=&amp;lt;最小内存&amp;gt;</span><br><span class="line">set Xmx=&amp;lt;最大内存&amp;gt;</span><br><span class="line">set jar=&amp;lt;开服核心名，无需后缀&amp;gt;</span><br></pre></td></tr></table></figure><br />有了变量，那么我们就要调用变量。我们把变量调用至Java参数中。如下所示：<br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">java -Xms%Xms% -Xmx%Xmx% -jar %jar%.jar</span><br></pre></td></tr></table></figure><br />现在，你已经学会了最基础的内容，本章到此完结。</p><h1>第三章 小有学识</h1><p class='item-img' data-src='https://www.mcmod.cn/pages/tools/achievements/images/achievements/201504_ndqqLSUf.png'><img src="https://www.mcmod.cn/pages/tools/achievements/images/achievements/201504_ndqqLSUf.png" /><br />服务器重启总是要手动？试试goto指令吧。如下所示:<br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">:1</span><br><span class="line">goto 1</span><br></pre></td></tr></table></figure><br />这样就可以不断跳回1处。goto命令用:&lt;标记名&gt;来做标记，牢记此点可完善服务器。<br />我们把参数加到中间，如下所示:<br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">:1</span><br><span class="line">set Xms=&amp;lt;最小内存&amp;gt;</span><br><span class="line">set Xmx=&amp;lt;最大内存&amp;gt;</span><br><span class="line">set jar=&amp;lt;开服核心名，无需后缀&amp;gt;</span><br><span class="line">java -Xms%Xms% -Xmx%Xmx% -jar %jar%.jar</span><br><span class="line">goto 1</span><br></pre></td></tr></table></figure><br />重启是解决了，可是关服好像也会重启？试试timeout或者choice吧。如下所示:<br /><span>timeout:</span><br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">set goto_time=&amp;lt;自重启等待秒数&amp;gt;</span><br><span class="line">timeout /t %goto_time%</span><br></pre></td></tr></table></figure><br /><span>choice:</span><br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">set goto_time=&amp;lt;自重启等待秒数&amp;gt;</span><br><span class="line">choice /c a /t %goto_time% /d a /n&amp;gt;nul</span><br></pre></td></tr></table></figure><br />这样不就解决了吗。我们把它加到参数中，如下所示:<br /><span>timeout:</span><br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">:1</span><br><span class="line">set goto_time=&amp;lt;自重启等待秒数&amp;gt;</span><br><span class="line">(略)</span><br><span class="line">timeout /t %goto_time%</span><br><span class="line">goto 1</span><br></pre></td></tr></table></figure><br /><span>choice:</span><br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">:1</span><br><span class="line">set goto_time=&amp;lt;自重启等待秒数&amp;gt;</span><br><span class="line">(略)</span><br><span class="line">choice /c a /t %goto_time% /d a /n&amp;gt;nul</span><br><span class="line">goto 1</span><br></pre></td></tr></table></figure><br />这样就有了一个高级的批处理了。但是回执似乎很烦？把@echo加进去试试吧。如下所示：<br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">@echo off</span><br><span class="line">(略)</span><br></pre></td></tr></table></figure><br />现在，烦人的回执就被关掉了。<br />你学会了这些内容，那么本章到此完结。</p><h1>第四章 扩展内容</h1><p class='item-img' data-src='https://www.mcmod.cn/pages/tools/achievements/images/achievements/0_qDrGhCsG.png'><img src="https://www.mcmod.cn/pages/tools/achievements/images/achievements/0_qDrGhCsG.png" /><br />这里是第四章，扩展内容。你可以在这里学到一些扩展内容。<br />在这里，你将学到<font color="blue"><b>color、echo、title</b></font>三种代码的用法。<br />背景和文字颜色好像太单调？还是黑底白字？我们来用<font color="blue"><b>color</b></font>设置颜色吧。如下所示：<br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">color &amp;lt;文字颜色&amp;gt;&amp;lt;背景颜色&amp;gt;</span><br></pre></td></tr></table></figure><br />颜色表:<br / class='item-img' data-src='https://z3.ax1x.com/2021/04/02/cmy7IU.jpg'><img src="https://z3.ax1x.com/2021/04/02/cmy7IU.jpg" /><br />听说你想增加回执？<font color="blue"><b>echo</b></font>满足你。如下所示：<br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">echo &amp;lt;内容&amp;gt;</span><br></pre></td></tr></table></figure><br />想自定义窗口标题？这个不难，<font color="blue"><b>title</b></font>可以做到。如下所示：<br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">title &amp;lt;标题&amp;gt;</span><br></pre></td></tr></table></figure><br />现在在你的批处理中加入他们做一个更高级的批处理来开服吧。<br />本章到此完结。</p><h1>扩展教程</h1><div class="sample-form"><form id="hcaptcha-demo-form" method="POST"><div class=""><div id="hcaptcha-demo" class="h-captcha" data-sitekey="3d162544-450b-4223-b895-dfcf219a416d" data-callback="onSuccess" data-expired-callback="onExpire"></div><script>                      var onSuccess = function(response) {                        var errorDivs = document.getElementsByClassName("hcaptcha-error");                        if (errorDivs.length) {                          errorDivs[0].className = "";                        }                        var errorMsgs = document.getElementsByClassName("hcaptcha-error-message");                        if (errorMsgs.length) {                          errorMsgs[0].parentNode.removeChild(errorMsgs[0]);                        }  var logEl = document.querySelector(".hcaptcha-success");  logEl.innerHTML = '<p><b>扩展1：使用Notepad++编辑</b><br/>Windows自带的记事本的编码方式难改，而使用<b>Notepad++</b>可以轻松调节编码方式，而且其填充功能可以轻松填入代码，无需频繁输入。</p><p><b>扩展2：使用记事本排列图案</b><br/>想用回执排列符号图案？记事本是个好东西。记事本的显示比例与bat窗口完全一致，是个排列图案的好东西。注意，排列完后记得把内容复制到编辑器里。</p>'                      };                      var onExpire = function(response) {                        var logEl = document.querySelector(".hcaptcha-success");                        logEl.innerHTML = '人机验证token已过期'              };</script></div></form><div class="hcaptcha-success smsg" aria-live="polite"></div></div><h1>白嫖区！！！</h1><p>白嫖bat↓↓↓纯手打<br /><a href="http://repo.huahuo-cn.tk/Start.bat">http://repo.huahuo-cn.tk/Start.bat</a><br /><br/>开服高级参数：<br/><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">-Xms&amp;lt;最大内存&amp;gt; -Xmx&amp;lt;最小内存&amp;gt; -XX:+UseG1GC -server -XX:+UseFastAccessorMethods -XX:+OptimizeStringConcat -XX:+AggressiveOpts -XX:MaxGCPauseMillis=10 -XX:+UseStringDeduplication -jar &amp;lt;核心名&amp;gt;.jar</span><br></pre></td></tr></table></figure></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p class=&#39;item-img&#39; data-src=&#39;https://z3.ax1x.com/2021/04/02/cmyqG4.png&#39;&gt;&lt;img src=&quot;https://z3.ax1x.com/2021/04/02/cmyqG4.png&quot; /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;</summary>
      
    
    
    
    
    <category term="Minecraft" scheme="https://endlife.1l1.icu/tags/Minecraft/"/>
    
  </entry>
  
  <entry>
    <title>Hexo Blog安装</title>
    <link href="https://endlife.1l1.icu/2021/03/21/Hexo%20Blog%E5%AE%89%E8%A3%85/"/>
    <id>https://endlife.1l1.icu/2021/03/21/Hexo%20Blog%E5%AE%89%E8%A3%85/</id>
    <published>2021-03-21T03:29:32.000Z</published>
    <updated>2024-08-30T23:38:29.795Z</updated>
    
    <content type="html"><![CDATA[<h2>安装Git&Node.js</h2><span>Git:<a href="https://git-scm.com/">https://git-scm.com/</a></span><span>Node.js:<a href="https://nodejs.org/en/">https://nodejs.org/en/</a></span><h2>安装Hexo</h2><span>安装完上面的Git和Node.js后，输入下面的命令安装Hexo</span><p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ npm install -g hexo-cli</span><br></pre></td></tr></table></figure></p><span>输入下面的命令创建Hexo目录</span><p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ hexo init</span><br><span class="line">或$ hexo init &amp;lt;想要用于存放hexo的目录&amp;gt;</span><br></pre></td></tr></table></figure></p><span>使用cd命令打开文件夹位置</span><p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ cd &amp;lt;存放hexo的目录&amp;gt;</span><br></pre></td></tr></table></figure><span>然后输入<span><p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ npm install</span><br></pre></td></tr></table></figure></p><h2>命令</h2><span>新建一篇文章。如果没有设置 layout 的话，默认使用 _config.yml 中的 default_layout 参数代替。如果标题包含空格的话，请使用引号括起来。</span><p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new [layout] &amp;lt;文章标题&amp;gt;</span><br></pre></td></tr></table></figure></p><span>生成静态文件</span><p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br><span class="line">缩写：$ hexo g</span><br></pre></td></tr></table></figure></p><span>启动服务器。默认情况下，访问网址为： <a href="http://localhost:4000">http://localhost:4000</a></span><p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure><br />缩写：<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo s</span><br></pre></td></tr></table></figure></p><span>部署网站</span><p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br><span class="line">缩写：$ hexo d</span><br></pre></td></tr></table></figure></p><span>清理hexo的缓存</span><p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo clean</span><br></pre></td></tr></table></figure></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2&gt;安装Git&amp;Node.js&lt;/h2&gt;
&lt;span&gt;Git:&lt;a href=&quot;https://git-scm.com/&quot;&gt;https://git-scm.com/&lt;/a&gt;&lt;/span&gt;
&lt;span&gt;Node.js:&lt;a href=&quot;https://nodejs.org/en</summary>
      
    
    
    
    
    <category term="教程" scheme="https://endlife.1l1.icu/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
</feed>
