https://linen.dev logo
【KaizPatch】以前は動いていた列車検知器がアプデ後から動かない
# forum
y
以前よりhi03TrainDetector2.0を利用した、レッドストーンブロックを在線情報とする信号回路を組んでいたのですが、MODのKaizPatchXを1.4.6から1.8.0にアップデートした際に、何らかの仕様変更によりスクリプトが動かなくなってしまい困っています。 恐らくRTM2.x系の処理が移植されたためと思われるのですが、どこを直せばいいものかの見当が付かないため、「こういう処理は動かなくなる」のような技術的情報をご存知の方は教えて頂けないでしょうか?
h
最新のKaizPatchと1.12ではposX~ZとprevPosX~Zの差が0になってしまうようで、移動量が0→nullを返すという仕様のため反応しないようです。 TrainSpawnerと踏切コントローラーの検知器は差が0のときは車両の速度を用いて検知するようにしています。
Copy code
js
//方向検知-先頭車型
function getCollideTrain(entity){
    var world = entity.field_70170_p;
    var aabb = entity.field_70121_D.func_72314_b(0, 2, 0);
    var train = null;
    world.func_72839_b(entity, aabb).forEach(
        function(collideEntity){
            if(collideEntity instanceof EntityTrainBase) train = collideEntity.getFormation().get(0).train;
            if(collideEntity instanceof EntityBogie) train = collideEntity.getTrain().getFormation().get(0).train;
        }
    );
    if(!train) return null;
    var motionX = train.field_70169_q - train.field_70165_t;
    var motionY = train.field_70167_r - train.field_70163_u;
    var motionZ = train.field_70166_s - train.field_70161_v;
    var motionVec = new Vec3(motionX, motionY, motionZ);
    if (motionVec.length() === 0) {
        var fotmation = entity.getFormation();
        var isDirInvert = fotmation ? Boolean(fotmation.getEntry(entity).dir) : false;
        var speed = isDirInvert ? -entity.getSpeed() : entity.getSpeed();
        var trainYaw = entity.field_70177_z + 180;
        motionVec = new Vec3(0, 0, speed);
        motionVec = motionVec.rotateAroundY(trainYaw);
    }
    var trainYaw = Math.floor(motionVec.getYaw() + 360) % 360;
    var signalYaw = Math.floor(entity.field_70177_z + 360) % 360;
    var negativeSignalYaw = signalYaw >= 5 ? signalYaw - 5 : signalYaw - 5 + 360;
    var positiveSignalYaw = signalYaw <= 355 ? signalYaw + 5 : signalYaw + 5 - 360;
    if (signalYaw > 5 && signalYaw < 355) {
        if (negativeSignalYaw <= trainYaw && trainYaw <= positiveSignalYaw) {
            return train.getFormation().get(0).train;;
        }
    }
    else {
        if (negativeSignalYaw <= trainYaw || trainYaw <= positiveSignalYaw) {
            return train.getFormation().get(0).train;;
        }
    }
    return null;
}
で直るかなと思います(未検証
y
情報ありがとうございます!助かります……