Remove the most useless mob in the game from ever spawning when not asked to
This commit is contained in:
parent
4068444e63
commit
ce224d6fe7
@ -55,6 +55,7 @@ import ru.dbotthepony.mc.otm.container.MatteryContainer
|
|||||||
import ru.dbotthepony.mc.otm.container.stream
|
import ru.dbotthepony.mc.otm.container.stream
|
||||||
import ru.dbotthepony.mc.otm.core.*
|
import ru.dbotthepony.mc.otm.core.*
|
||||||
import ru.dbotthepony.mc.otm.core.collect.UUIDIntModifiersMap
|
import ru.dbotthepony.mc.otm.core.collect.UUIDIntModifiersMap
|
||||||
|
import ru.dbotthepony.mc.otm.core.collect.filter
|
||||||
import ru.dbotthepony.mc.otm.core.collect.nonEmpty
|
import ru.dbotthepony.mc.otm.core.collect.nonEmpty
|
||||||
import ru.dbotthepony.mc.otm.core.math.Decimal
|
import ru.dbotthepony.mc.otm.core.math.Decimal
|
||||||
import ru.dbotthepony.mc.otm.core.math.minus
|
import ru.dbotthepony.mc.otm.core.math.minus
|
||||||
@ -79,6 +80,7 @@ import ru.dbotthepony.mc.otm.triggers.BecomeAndroidTrigger
|
|||||||
import ru.dbotthepony.mc.otm.triggers.BecomeHumaneTrigger
|
import ru.dbotthepony.mc.otm.triggers.BecomeHumaneTrigger
|
||||||
import ru.dbotthepony.mc.otm.triggers.PhantomSpawnDeniedTrigger
|
import ru.dbotthepony.mc.otm.triggers.PhantomSpawnDeniedTrigger
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
import java.util.function.Predicate
|
||||||
import java.util.stream.Stream
|
import java.util.stream.Stream
|
||||||
import kotlin.collections.ArrayDeque
|
import kotlin.collections.ArrayDeque
|
||||||
import kotlin.collections.ArrayList
|
import kotlin.collections.ArrayList
|
||||||
@ -1248,13 +1250,15 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
|
|||||||
* hooked into PhantomSpawner through coremod script
|
* hooked into PhantomSpawner through coremod script
|
||||||
*/
|
*/
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun phantomSpawnHook(player: Player): Boolean {
|
fun phantomSpawnHook(iterator: Iterator<Player>): Iterator<Player> {
|
||||||
if (player.matteryPlayer?.isAndroid == true) {
|
return iterator.filter {
|
||||||
val feature = player.matteryPlayer?.getFeature(AndroidFeatures.PHANTOM_ATTRACTOR) as AndroidSwitchableFeature?
|
if (it.matteryPlayer?.isAndroid == true) {
|
||||||
return feature?.isActive == true
|
val feature = it.matteryPlayer?.getFeature(AndroidFeatures.PHANTOM_ATTRACTOR) as AndroidSwitchableFeature?
|
||||||
|
feature?.isActive == true
|
||||||
|
} else {
|
||||||
|
true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun canEntitySpawn(event: LivingSpawnEvent.CheckSpawn) {
|
fun canEntitySpawn(event: LivingSpawnEvent.CheckSpawn) {
|
||||||
|
@ -577,23 +577,19 @@ function backtrack(instructions, from, opcode, skipAmount) {
|
|||||||
function initializeCoreMod() {
|
function initializeCoreMod() {
|
||||||
return {
|
return {
|
||||||
'PhantomSpawner block spawns as android': method('net.minecraft.world.level.levelgen.PhantomSpawner.m_7995_(Lnet/minecraft/server/level/ServerLevel;ZZ)I', function(node) {
|
'PhantomSpawner block spawns as android': method('net.minecraft.world.level.levelgen.PhantomSpawner.m_7995_(Lnet/minecraft/server/level/ServerLevel;ZZ)I', function(node) {
|
||||||
var isSpectator = ASMAPI.mapMethod('m_5833_')
|
var players = ASMAPI.mapMethod('m_6907_')
|
||||||
|
|
||||||
for (var i = 0; i < node.instructions.size(); i++) {
|
for (var i = 0; i < node.instructions.size(); i++) {
|
||||||
var instr = node.instructions.get(i)
|
var instr = node.instructions.get(i)
|
||||||
|
|
||||||
if (instr.getOpcode() == opcodesRemapped.invokevirtual && instr.name == isSpectator) {
|
if (instr.getOpcode() == opcodesRemapped.invokevirtual && instr.name == players) {
|
||||||
var aload = backtrack(node.instructions, i, opcodesRemapped.aload)
|
putInstructions(node, node.instructions.get(i + 1), [
|
||||||
|
|
||||||
putInstructions(node, instr, [
|
|
||||||
new VarInsnNode(opcodesRemapped.aload, aload["var"]),
|
|
||||||
new MethodInsnNode(
|
new MethodInsnNode(
|
||||||
opcodesRemapped.invokestatic,
|
opcodesRemapped.invokestatic,
|
||||||
'ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability',
|
'ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability',
|
||||||
'phantomSpawnHook',
|
'phantomSpawnHook',
|
||||||
'(Lnet/minecraft/world/entity/player/Player;)Z'
|
'(Ljava/util/Iterator;)Ljava/util/Iterator;'
|
||||||
),
|
),
|
||||||
new InsnNode(opcodesRemapped.iand)
|
|
||||||
])
|
])
|
||||||
|
|
||||||
return node
|
return node
|
||||||
|
Loading…
Reference in New Issue
Block a user