玩格雷必备小工具 - 矿工茶馆 - Minecraft(我的世界)中文论坛 -.html

玩格雷必备小工具 - 矿工茶馆 - Minecraft(我的世界)中文论坛 -

Minecraft(我的世界)中文论坛

 找回密码
 注册(register)

!header_login!

只需一步,立刻登录

查看: 438|回复: 20
打印 上一主题 下一主题

[闲聊] 玩格雷必备小工具

[复制链接]
可爱的盒子 当前离线
积分
1518
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-1-29
查看详细资料

来自:浙江

跳转到指定楼层
楼主
发表于 2023-1-4 11:00:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 I_am_god_Father 于 2023-1-4 12:10 编辑

我有强迫症我做合成一个东西的时候材料必须是正好的,就比如说格雷6的黑沙炼铁,新版黑沙含的磁铁矿更多了怎么都算不出在一锅里投放的合适的比例我身上有蚂蚁在爬,因为NEI说磁铁矿:碳=14:3,煤炭:碳=1:2,黑沙:磁铁矿=1:9,然而我只有磁铁矿和煤,我想算一个比例让我炼铁的时候反应物被完全消耗并且炼出来的铁是整数个就不太好算。
昨天炼铝更是忍无可忍,铝有如下合成关联关系:
//3碳+10氧化铝+4氟化铝+2冰晶石=4铝
//2煤炭=1碳
//5氧化铝+9000六氟硅酸=1152氟化铝
//1石英+4000氟化氢=3000六氟硅酸
//3氟石+7000硫酸=4000氟化氢
//1000三氧化硫+750蒸馏水=1750硫酸
//3石英+6硫酸钙=4000三氧化硫
//1石膏=1硫酸钙
//4石膏矿石=5石膏
//18氢氧化钠+5氧化铝+24000氟化氢=2880冰晶石
//4盐+12000蒸馏水=6氢氧化钠

//......
最后我不得不向恶势力低头,选择乱炼不在计算比例

但是今天越想越气,想到之后还需要炼钛,钨,钽之类的矿我身上有Long.MAX_VALUE^Long.MAX_VALUE只蚂蚁再爬
于是就写了一个比例♂计算器
下面是运行效果:





直接给我把所有比例全部算好,想用哪个就用哪个,这么好用的东西当然要分享给你们


首先是jar包:
游客,如果您要查看本帖隐藏内容请回复


下面是源代码:
  1. package radio

  2. import scala.annotation.tailrec
  3. import scala.collection.mutable
  4. import scala.io.StdIn

  5. /**
  6. * [url=home.php?mod=space&uid=1231151]@author[/url] box
  7. * [url=home.php?mod=space&uid=317349]@Since[/url] 2022/1/3 16:36
  8. */

  9. object RadioCalculator {
  10.   def main(args: Array[String]): Unit = {
  11.     val mutableInputSet : mutable.Set[String] = mutable.Set()
  12.     @tailrec def loopInput: Any = {
  13.       println("请输入原始比例,输入end结束")
  14.       val in = StdIn.readLine()
  15.       if (in.equals("end"))
  16.         return
  17.       else
  18.         mutableInputSet.add(in)
  19.       loopInput
  20.     }
  21.     loopInput
  22.     val calculatorEntityList = parseCalculatorEntity(mutableInputSet.toList)
  23.     val flatTargetItem = calculatorEntityList.flatMap(_.out.map(_.item))
  24.     println(s"可以进行比例计算的物品有:${flatTargetItem.mkString(",")}")
  25.     def getCalculatorEntity(target: String): List[CalculatorEntity] = calculatorEntityList.filter(_.out.map(_.item).contains(target))
  26.     def getMultiItemInCalculatorEntity(o: CalculatorEntity, itemName: String): MultiItem = (o.src ++ o.out).filter(o => o.item.equals(itemName)).head
  27.     def combineAndBuildBalancedCalculatorEntity(splitItem: MultiItem, calculatorEntity: CalculatorEntity): CalculatorEntity = {
  28.       val splintedCalculatorEntity = getCalculatorEntity(splitItem.item).head
  29.       def multi(item: CalculatorEntity, count: Int) = CalculatorEntity(
  30.         item.src.map(o => MultiItem(o.item, o.count * count)),
  31.         item.out.map(o => MultiItem(o.item, o.count * count)))
  32.       val multiplicativeEntity = multi(calculatorEntity, getMultiItemInCalculatorEntity(splintedCalculatorEntity, splitItem.item).count)
  33.       val multiNumber: Int = getMultiItemInCalculatorEntity(multiplicativeEntity, splitItem.item).count / getMultiItemInCalculatorEntity(splintedCalculatorEntity, splitItem.item).count
  34.       val comb = multi(splintedCalculatorEntity, multiNumber)
  35.       CalculatorEntity(comb.src ++ multiplicativeEntity.src.filter(_.item != splitItem.item), multiplicativeEntity.out)
  36.     }
  37.     def simplifyCalculate(oldEntity: CalculatorEntity): CalculatorEntity = {
  38.       val calculatorEntity = CalculatorEntity(oldEntity.src.groupBy(o => o.item).map(option => MultiItem(option._1, option._2.map(o => o.count).sum)).toList,
  39.         oldEntity.out.groupBy(o => o.item).map(option => MultiItem(option._1, option._2.map(o => o.count).sum)).toList)
  40.       val numList: List[Int] = (calculatorEntity.out ++ calculatorEntity.src).map(o => o.count)
  41.       val max = numList.max / 2 + 1
  42.       @tailrec def findNextCalculatorEntity(now: Int): CalculatorEntity = {
  43.         if (!numList.exists(_ % now != 0))
  44.           CalculatorEntity(calculatorEntity.src.map(o => MultiItem(o.item, o.count / now)), calculatorEntity.out.map(o => MultiItem(o.item, o.count / now)))
  45.         else
  46.           findNextCalculatorEntity(now - 1)
  47.       }
  48.       findNextCalculatorEntity(max)
  49.     }

  50.     val cache: mutable.Set[CalculatorEntity] = new mutable.HashSet[CalculatorEntity]()
  51.     @tailrec def calculate: Any = {
  52.       println("请输入需要进行计算的物品:")
  53.       val in = StdIn.readLine()

  54.       def getNextCraft(nowCalculatorEntity: CalculatorEntity): Any = {
  55.         val simplifyCalculatorEntity: CalculatorEntity = simplifyCalculate(nowCalculatorEntity)
  56.         if (cache.contains(simplifyCalculatorEntity)){
  57.           return
  58.         }else {
  59.           cache.add(simplifyCalculatorEntity)
  60.         }
  61.         println(s"${simplifyCalculatorEntity.src.mkString("+")} = ${simplifyCalculatorEntity.out.mkString("+")}")
  62.         simplifyCalculatorEntity.src.filter(o => getCalculatorEntity(o.item).nonEmpty)
  63.           .foreach(o => getNextCraft(combineAndBuildBalancedCalculatorEntity(o, simplifyCalculatorEntity)))
  64.       }
  65.       getNextCraft(getCalculatorEntity(in).head)
  66.       calculate
  67.     }
  68.     calculate
  69.   }
  70.   def parseCalculatorEntity(src: List[String]): List[CalculatorEntity] = {
  71.     src.map(o => {
  72.       val strings = o.split("=")
  73.       if (strings.length != 2) throw new RuntimeException
  74.       def splitParticle(string: String): List[MultiItem] = string
  75.         .split("[+]")
  76.         .map(o => MultiItem(o.substring("[0-9]+".r.findFirstIn(o).get.length), "[0-9]+".r.findFirstIn(o).get.toInt))
  77.         .toList
  78.       CalculatorEntity(splitParticle(strings(0)), splitParticle(strings(1)))
  79.     })
  80.   }

  81. }

  82. case class CalculatorEntity(src: List[MultiItem], out: List[MultiItem])

  83. case class MultiItem(item: String, count: Int) {
  84.   override def toString: String = s"$count$item"
  85. }



复制代码




package radio

import scala.annotation.tailrec
import scala.collection.mutable
import scala.io.StdIn

/**
* @author box
* @since 2022/1/3 16:36
*/
object RadioCalculator {
  def main(args: Array[String]): Unit = {
    val mutableInputSet : mutable.Set[String] = mutable.Set()
    @tailrec def loopInput: Any = {
      println("请输入原始比例,输入end结束")
      val in = StdIn.readLine()
      if (in.equals("end"))
        return
      else
        mutableInputSet.add(in)
      loopInput
    }
    loopInput
    val calculatorEntityList = parseCalculatorEntity(mutableInputSet.toList)
    val flatTargetItem = calculatorEntityList.flatMap(_.out.map(_.item))
    println(s"可以进行比例计算的物品有:${flatTargetItem.mkString(",")}")
    def getCalculatorEntity(target: String): List[CalculatorEntity] = calculatorEntityList.filter(_.out.map(_.item).contains(target))
    def getMultiItemInCalculatorEntity(o: CalculatorEntity, itemName: String): MultiItem = (o.src ++ o.out).filter(o => o.item.equals(itemName)).head
    def combineAndBuildBalancedCalculatorEntity(splitItem: MultiItem, calculatorEntity: CalculatorEntity): CalculatorEntity = {
      val splintedCalculatorEntity = getCalculatorEntity(splitItem.item).head
      def multi(item: CalculatorEntity, count: Int) = CalculatorEntity(
        item.src.map(o => MultiItem(o.item, o.count * count)),
        item.out.map(o => MultiItem(o.item, o.count * count)))
      val multiplicativeEntity = multi(calculatorEntity, getMultiItemInCalculatorEntity(splintedCalculatorEntity, splitItem.item).count)
      val multiNumber: Int = getMultiItemInCalculatorEntity(multiplicativeEntity, splitItem.item).count / getMultiItemInCalculatorEntity(splintedCalculatorEntity, splitItem.item).count
      val comb = multi(splintedCalculatorEntity, multiNumber)
      CalculatorEntity(comb.src ++ multiplicativeEntity.src.filter(_.item != splitItem.item), multiplicativeEntity.out)
    }
    def simplifyCalculate(oldEntity: CalculatorEntity): CalculatorEntity = {
      val calculatorEntity = CalculatorEntity(oldEntity.src.groupBy(o => o.item).map(option => MultiItem(option._1, option._2.map(o => o.count).sum)).toList,
        oldEntity.out.groupBy(o => o.item).map(option => MultiItem(option._1, option._2.map(o => o.count).sum)).toList)
      val numList: List[Int] = (calculatorEntity.out ++ calculatorEntity.src).map(o => o.count)
      val max = numList.max / 2 + 1
      @tailrec def findNextCalculatorEntity(now: Int): CalculatorEntity = {
        if (!numList.exists(_ % now != 0))
          CalculatorEntity(calculatorEntity.src.map(o => MultiItem(o.item, o.count / now)), calculatorEntity.out.map(o => MultiItem(o.item, o.count / now)))
        else
          findNextCalculatorEntity(now - 1)
      }
      findNextCalculatorEntity(max)
    }

    val cache: mutable.Set[CalculatorEntity] = new mutable.HashSet[CalculatorEntity]()
    @tailrec def calculate: Any = {
      println("请输入需要进行计算的物品:")
      val in = StdIn.readLine()

      def getNextCraft(nowCalculatorEntity: CalculatorEntity): Any = {
        val simplifyCalculatorEntity: CalculatorEntity = simplifyCalculate(nowCalculatorEntity)
        if (cache.contains(simplifyCalculatorEntity)){
          return
        }else {
          cache.add(simplifyCalculatorEntity)
        }
        println(s"${simplifyCalculatorEntity.src.mkString("+")} = ${simplifyCalculatorEntity.out.mkString("+")}")
        simplifyCalculatorEntity.src.filter(o => getCalculatorEntity(o.item).nonEmpty)
          .foreach(o => getNextCraft(combineAndBuildBalancedCalculatorEntity(o, simplifyCalculatorEntity)))
      }
      getNextCraft(getCalculatorEntity(in).head)
      calculate
    }
    calculate
  }
  def parseCalculatorEntity(src: List[String]): List[CalculatorEntity] = {
    src.map(o => {
      val strings = o.split("=")
      if (strings.length != 2) throw new RuntimeException
      def splitParticle(string: String): List[MultiItem] = string
        .split("[+]")
        .map(o => MultiItem(o.substring("[0-9]+".r.findFirstIn(o).get.length), "[0-9]+".r.findFirstIn(o).get.toInt))
        .toList
      CalculatorEntity(splitParticle(strings(0)), splitParticle(strings(1)))
    })
  }

}

case class CalculatorEntity(src: List[MultiItem], out: List[MultiItem])

case class MultiItem(item: String, count: Int) {
  override def toString: String = s"$count$item"
}


收藏收藏 顶一下顶一下 踩一下踩一下
帖子永久链接: 
qaqJiaq 当前离线
积分
133
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2017-2-4
查看详细资料

来自:未知地域

沙发
发表于 2023-1-4 11:11:59 | 只看该作者
压力马斯内
回复

使用道具 举报

骰出的名字 当前离线
积分
5445
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2022-9-4
查看详细资料

来自:未知地域

板凳
发表于 2023-1-4 11:27:44 来自手机 | 只看该作者
这好像是一个MC论坛(隐藏内容是无法添加超链接吗?
回复

使用道具 举报

wsseieiei 当前离线
积分
2734
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2022-5-3
查看详细资料

来自:未知地域

地板
发表于 2023-1-4 11:34:55 | 只看该作者
是不是应该发到软件资源区,茶馆不能设回复可见qwq
回复

使用道具 举报

『南南』 当前离线
积分
6158
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2022-2-9
查看详细资料

来自:上海

5#
发表于 2023-1-4 11:35:23 | 只看该作者
茶馆禁用回复可见的说
回复

使用道具 举报

北街灵猫 当前离线
积分
875
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2022-8-21
查看详细资料

来自:山东

6#
发表于 2023-1-4 11:37:08 | 只看该作者
这是个MC模组吗?
回复

使用道具 举报

WisW 当前离线
积分
3201
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-6-20
查看详细资料

来自:未知地域

7#
发表于 2023-1-4 11:41:26 | 只看该作者

这代码不是java
回复

使用道具 举报

可爱的盒子 当前离线
积分
1518
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-1-29
查看详细资料

来自:浙江

8#
 楼主| 发表于 2023-1-4 11:58:23 | 只看该作者
『南南』 发表于 2023-1-4 11:35
茶馆禁用回复可见的说

饿啊原来是这样
回复

使用道具 举报

可爱的盒子 当前离线
积分
1518
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-1-29
查看详细资料

来自:浙江

9#
 楼主| 发表于 2023-1-4 12:00:39 | 只看该作者

虽然不是java但是scala也是能开发模组的哦,因为scala和java都是jvm语言,都是在一个环境下运行的,scala和java可以直接互相调用

评分

参与人数 1人气 +2收起 理由
WisW+ 2学到了

查看全部评分

回复

使用道具 举报

TravelEarthPlan 当前离线
积分
236
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2022-9-24
查看详细资料

来自:河南

10#
发表于 2023-1-4 12:02:24 | 只看该作者
我超,真佬!
回复

使用道具 举报

北街灵猫 当前离线
积分
875
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2022-8-21
查看详细资料

来自:山东

11#
发表于 2023-1-4 12:05:54 | 只看该作者

我能看出来是用JAVA编译的,我是想问最开始的内容是MC的模组吗?
回复

使用道具 举报

WisW 当前离线
积分
3201
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-6-20
查看详细资料

来自:未知地域

12#
发表于 2023-1-4 12:10:24 | 只看该作者
北街灵猫 发表于 2023-1-4 12:05
我能看出来是用JAVA编译的,我是想问最开始的内容是MC的模组吗?

有println不像是
回复

使用道具 举报

柚子滑稽 当前离线
积分
3501
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2021-10-3
查看详细资料

来自:广东

13#
发表于 2023-1-4 12:11:07 | 只看该作者
阿巴阿巴,看不懂(
回复

使用道具 举报

xiao_han_ 当前离线
积分
235
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2017-2-4
查看详细资料

来自:未知地域

14#
发表于 2023-1-4 12:13:18 | 只看该作者
好高级 这个该怎么用 复制代码到哪里?
回复

使用道具 举报

可爱的盒子 当前离线
积分
1518
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-1-29
查看详细资料

来自:浙江

15#
 楼主| 发表于 2023-1-4 12:15:49 | 只看该作者
xiao_han_ 发表于 2023-1-4 12:13
好高级 这个该怎么用 复制代码到哪里?

在idea创建一个RadioCalculator.scala文件,把代码复制进去后,idea会教你怎么做的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 京公网安备 11010502037624号 | 手机版

GMT+8, 2023-12-28 16:15 , Processed in 0.061083 second(s), Total 30, Slave 29 queries, Release: Build.2023.11.27 0934, Gzip On, Redis On.

"Minecraft"以及"我的世界"为美国微软公司的商标 本站与微软公司没有从属关系

© 2010-2023 我的世界中文论坛 版权所有 本站内原创内容版权属于其原创作者,除作者或版规特别声明外未经许可不得转载