Отключение миров

Версия Minecraft
1.16.5
API
Forge
40
1
7
Всем добра!

Направьте куда копать, чтобы отключить Nether и End в игре?

Вроде где-то увидел что с помощью mixins делается. В данный момент сейчас смотрю как вообще с ними работать.
Пробовал через event, запрет создания портала и перемещения. Что-то пока не сработало.

Плагины не предлагать.
 
Полностью отключить измерения думаю можно, но сложно и не эффективно.
запрет создания портала
В Entity должен быть метод handleNetherPortal, его нужно отменить с помощью миксина.
Для энда можно отменить entityInsideв EndPortalBlock.

Проще будет в переопределить changeDimension у игрока(Либо у Entity) оставив его пустым, но тогда переход в любое измерение будет невозможен.

как вообще с ними работать.
Смотри тут.
 
@Mr.Toad очень странно, но у меня показывает в idea что нету entityInside.

1736745348230.png
Пробовал с onEntityCollision, пробовал с entityInside.

MixinEndPortalBlock.java:
package com.morington.moringtech.mixin;

import net.minecraft.block.BlockState;
import net.minecraft.block.EndPortalBlock;
import net.minecraft.entity.Entity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(EndPortalBlock.class)
abstract class MixinEndPortalBlock {
    private static final Logger LOGGER = LogManager.getLogger();

    @Inject(
            method = "entityInside",
            at = @At(value = "HEAD"),
            cancellable=true
    )
    public void runPortalEvent(BlockState state, World worldIn, BlockPos pos, Entity entityIn, CallbackInfo ci) {
        LOGGER.info("HELLO!");
        ci.cancel();
    }
}

Миксин подключил:
moringtech.mixin.json:
{
  "required": true,
  "package": "com.morington.moringtech.mixin",
  "compatibilityLevel": "JAVA_8",
  "mixins": [
    "MixinEndPortalBlock"
  ],
  "client": [],
  "injectors": {
    "defaultRequire": 1
  },
  "refmap": "moringtech.mixin-refmap.json"
}

build.gradle:
buildscript {
    repositories {
        maven { url = 'https://maven.minecraftforge.net' }
        maven { url = 'https://repo.spongepowered.org/maven' }
        mavenCentral()
    }
    dependencies {
        classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true
        classpath 'org.spongepowered:mixingradle:0.7-SNAPSHOT'
    }
}
apply plugin: 'net.minecraftforge.gradle'
// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
apply plugin: 'eclipse'
apply plugin: 'maven-publish'
apply plugin: 'org.spongepowered.mixin'

version = '1.0'
group = 'com.morington.moringtech' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = 'moringtech'

java.toolchain.languageVersion = JavaLanguageVersion.of(8) // Mojang ships Java 8 to end users, so your mod should target Java 8.
compileJava {
    [compileJava, compileTestJava][I].options[/I].encoding = 'UTF-8'
}

println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch'))
minecraft {
    mappings channel: 'snapshot', version: '20210309-1.16.5'

    runs {
        client {
            workingDirectory project.file('run')
            property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
            property 'forge.logging.console.level', 'debug'

            arg "-mixin.config=moringtech.mixin.json"

            mods {
                moringtech {
                    source sourceSets.main
                }
            }
        }

        server {
            workingDirectory project.file('run')
            property 'forge.logging.markers', 'REGISTRIES'
            property 'forge.logging.console.level', 'debug'

            arg "-mixin.config=moringtech.mixin.json"

            mods {
                moringtech {
                    source sourceSets.main
                }
            }
        }

        data {
            workingDirectory project.file('run')
            property 'forge.logging.markers', 'REGISTRIES'
            property 'forge.logging.console.level', 'debug'
            args '--mod', 'moringtech', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')

            mods {
                moringtech {
                    source sourceSets.main
                }
            }
        }
    }
}

// Include resources generated by data generators.
sourceSets.main.resources { srcDir 'src/generated/resources' }

dependencies {
    minecraft 'net.minecraftforge:forge:1.16.5-36.2.34'

}

mixin {
    add sourceSets.main, "moringtech.mixin-refmap.json"
}

// Example for how to get properties into the manifest for reading by the runtime..
jar {
    manifest {
        attributes([
            "Specification-Title": "moringtech",
            "Specification-Vendor": "moringtechsareus",
            "Specification-Version": "1",
            "Implementation-Title": project.name,
            "Implementation-Version": "${version}",
            "Implementation-Vendor" :"moringtechsareus",
            "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
            "TweakClass": "org.spongepowered.asm.launch.MixinTweaker",
            "TweakOrder": 0,
            "MixinConfigs" : "moringtech.mixin.json"
        ])
    }
}

jar.finalizedBy('reobfJar')

//publishing {
//    publications {
//        mavenJava(MavenPublication) {
//            artifact jar
//        }
//    }
//    repositories {
//        maven {
//            url "file:///${project.projectDir}/mcmodsrepo"
//        }
//    }
//}

Все что есть в EndPortalBlock
1736745390350.png
 
@Mr.Toad очень странно, но у меня показывает в idea что нету entityInside.
mappings channel: 'snapshot', version: '20210309-1.16.5', у тебя другие маппинги, либо ищи метод отвечающий за это, либо ставь mappings channel: 'official', version: '1.16.5'


UPD: На твоих маппингах это скорее всего onEntityCollision
 
Последнее редактирование:
Назад
Сверху