extremely fast archaeology

This commit is contained in:
YuRaNnNzZZ 2023-11-15 02:13:30 +03:00
parent a618436ddd
commit 993b1ac0fc
Signed by: YuRaNnNzZZ
GPG Key ID: 5F71738C85A6006D
4 changed files with 114 additions and 4 deletions

View File

@ -163,7 +163,8 @@ fun addResearchData(serializer: Consumer<AndroidResearchType>, lang: MatteryLang
TranslatableComponent(
"android_research.overdrive_that_matters.limb_overclocking.description",
(i + 1) * 8,
(i + 1) * 6
(i + 1) * 6,
(i + 1) * 20
)
)
.addItem(MItemTags.COPPER_WIRES, 4 + i * 2)
@ -426,8 +427,8 @@ fun addResearchData(serializer: Consumer<AndroidResearchType>, lang: MatteryLang
russian("Разгон конечностей %s")
}
add(limbList[0], "description", "Boosts mobility by %s%% and attack speed by %s%%") {
russian("Увеличивает мобильность на %s%% и скорость атак на %s%%")
add(limbList[0], "description", "Boosts mobility by %s%%, attack speed by %s%% and brushing speed by %s%%") {
russian("Увеличивает мобильность на %s%%, скорость атак на %s%% и скорость чистки блоков на %s%%")
}
add(AIR_BAGS, "Air Bags") {

View File

@ -1,9 +1,12 @@
package ru.dbotthepony.mc.otm.android.feature
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.attributes.AttributeModifier
import net.minecraft.world.entity.ai.attributes.Attributes
import net.minecraft.world.entity.player.Player
import ru.dbotthepony.mc.otm.android.AndroidFeature
import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability
import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.registry.AndroidFeatures
import java.util.*
@ -31,5 +34,34 @@ class LimbOverclockingFeature(android: MatteryPlayerCapability) : AndroidFeature
companion object {
private val MODIFIER_ID = UUID.fromString("4a3fae46-e57b-4e20-857d-f5c2b2c8f2f2")
@JvmStatic
fun getBrushCooldown(entity: LivingEntity): Int {
if (entity !is Player) return 10
val matteryPlayer = entity.matteryPlayer ?: return 10
if (!matteryPlayer.isAndroid || !matteryPlayer.hasFeature(AndroidFeatures.LIMB_OVERCLOCKING)) return 10
val level = matteryPlayer.getFeature(AndroidFeatures.LIMB_OVERCLOCKING)!!.level + 1
return (10 - level * 2).coerceAtLeast(2)
}
@JvmStatic
fun getBrushTick(entity: LivingEntity): Int {
if (entity !is Player) return 5
val matteryPlayer = entity.matteryPlayer ?: return 5
if (!matteryPlayer.isAndroid || !matteryPlayer.hasFeature(AndroidFeatures.LIMB_OVERCLOCKING)) return 5
val level = matteryPlayer.getFeature(AndroidFeatures.LIMB_OVERCLOCKING)!!.level + 1
return (5 - level).coerceAtLeast(1)
}
@JvmStatic
fun getBrushableBlockCooldown(player: Player): Long {
val matteryPlayer = player.matteryPlayer ?: return 10L
if (!matteryPlayer.isAndroid || !matteryPlayer.hasFeature(AndroidFeatures.LIMB_OVERCLOCKING)) return 10L
val level = matteryPlayer.getFeature(AndroidFeatures.LIMB_OVERCLOCKING)!!.level + 1
return (10L - level * 2L).coerceAtLeast(2L)
}
}
}

View File

@ -1,4 +1,5 @@
{
"code_injector": "coremods/code_injector.js",
"chest_menus": "coremods/chest_menus.js"
"chest_menus": "coremods/chest_menus.js",
"limb_brush_overclock": "coremods/limb_brush_overclock.js"
}

View File

@ -0,0 +1,76 @@
var Opcodes = Java.type('org.objectweb.asm.Opcodes')
var VarInsnNode = Java.type('org.objectweb.asm.tree.VarInsnNode')
var MethodInsnNode = Java.type('org.objectweb.asm.tree.MethodInsnNode')
function initializeCoreMod() {
return {
'Patch brush item': {
'target': {
"type":"METHOD",
"class":"net.minecraft.world.item.BrushItem",
"methodName":"m_5929_",
"methodDesc":"(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/item/ItemStack;I)V"
},
'transformer': function(node) {
for (i = 0; i < node.instructions.size(); i++) {
var insn = node.instructions.get(i)
if (insn.getOpcode() == Opcodes.BIPUSH) {
node.instructions.insert(insn, new MethodInsnNode(
Opcodes.INVOKESTATIC,
'ru/dbotthepony/mc/otm/android/feature/LimbOverclockingFeature',
'getBrushCooldown',
'(Lnet/minecraft/world/entity/LivingEntity;)I'
))
node.instructions.set(insn, new VarInsnNode(Opcodes.ALOAD, 2))
i += 1
continue
}
if (insn.getOpcode() == Opcodes.ICONST_5) {
node.instructions.insert(insn, new MethodInsnNode(
Opcodes.INVOKESTATIC,
'ru/dbotthepony/mc/otm/android/feature/LimbOverclockingFeature',
'getBrushTick',
'(Lnet/minecraft/world/entity/LivingEntity;)I'
))
node.instructions.set(insn, new VarInsnNode(Opcodes.ALOAD, 2))
i += 1
continue
}
}
return node
}
},
'Patch brushable block': {
'target': {
"type":"METHOD",
"class":"net.minecraft.world.level.block.entity.BrushableBlockEntity",
"methodName":"m_276923_",
"methodDesc":"(JLnet/minecraft/world/entity/player/Player;Lnet/minecraft/core/Direction;)Z"
},
'transformer': function(node) {
for (i = 0; i < node.instructions.size(); i++) {
var insn = node.instructions.get(i)
if (insn.getOpcode() == Opcodes.LDC && insn.cst == 10) {
node.instructions.insert(insn, new MethodInsnNode(
Opcodes.INVOKESTATIC,
'ru/dbotthepony/mc/otm/android/feature/LimbOverclockingFeature',
'getBrushableBlockCooldown',
'(Lnet/minecraft/world/entity/player/Player;)J'
))
node.instructions.set(insn, new VarInsnNode(Opcodes.ALOAD, 3))
break
}
}
return node
}
},
}
}