Мод Forge 1.21.1 загружается неправильно, ошибкаJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Мод Forge 1.21.1 загружается неправильно, ошибка

Сообщение Anonymous »

Согласно IntelliJ forge 1.21.1 устарели .get() и .get().getModEventBus(), мне интересно, не поэтому ли мой код вызывает ошибки. Если да, то как мне теперь это написать? Я пытался спросить ChatGPT о новом методе (все время говорил мне использовать .get().getModEventBus()) и исследовать (либо говорит, что поиск не соответствует никаким документам, либо другие проблемы с подделкой и как установить forge ) безрезультатно. Я не верю, что это ошибка, и это не имеет большого значения для .get(), поскольку я видел, как другие использовали его еще в forge 1.21.1.
Я пробовал запустить свой мод, но он вылетает с такой ошибкой:
Copy-Chat (copychat) has failed to load correctly
java.lang.IllegalArgumentException: Listener for event class
net.minecraftforge.event.server.ServerStratingEvent takes an argument that is not a subtype of the base type interface
net.minecraftforge.fml.event.IModBusEvent

Большое спасибо, Код.
Мод может отправлять разные сообщения, а вскоре (надеюсь) присоединяться и оставлять сообщения. Если есть другие моды, которые выполняют ту же задачу для forge 1.21.1, мне это не особо интересно, поскольку я хочу создать свой собственный (речь идет о творчестве и задачах, которые он представляет, но это одна из задач, с которой я действительно хочу и нуждаюсь в помощи). ). Конечно, сейчас это не слишком реалистично, но я исправлю это, когда это будет исправлено!
Код мода:
package com.github.CodeCorruption0.copychat;

import com.mojang.brigadier.Command;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.arguments.StringArgumentType;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.Style;
import net.minecraft.network.chat.TextColor;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.commands.arguments.EntityArgument;
import net.minecraftforge.event.server.ServerStartingEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;

import java.util.function.Supplier;

@Mod(CopyChat.MOD_ID)
public class CopyChat {
public static final String MOD_ID = "copychat";

public CopyChat() {
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
modEventBus.addListener(this::onServerStarting);
}

private void onServerStarting(ServerStartingEvent event) {
registerCommands(event.getServer().getCommands().getDispatcher());
}

private void registerCommands(CommandDispatcher dispatcher) {
dispatcher.register(Commands.literal("copy-chat")
.then(Commands.literal("Server")
.then(Commands.argument("message", StringArgumentType.greedyString())
.executes(context -> sendServerMessage(context, StringArgumentType.getString(context, "message")))
)
)
.then(Commands.literal("Player")
.then(Commands.argument("player", EntityArgument.player())
.then(Commands.argument("message", StringArgumentType.greedyString())
.executes(context -> sendPlayerMessage(context, EntityArgument.getPlayer(context, "player"), StringArgumentType.getString(context, "message")))
)
)
)
.then(Commands.literal("MSG")
.then(Commands.argument("target", EntityArgument.player())
.then(Commands.argument("sender", StringArgumentType.string())
.then(Commands.argument("message", StringArgumentType.greedyString())
.executes(context -> sendMessage(context, EntityArgument.getPlayer(context, "target"), StringArgumentType.getString(context, "sender"), StringArgumentType.getString(context, "message")))
)
)
)
)
);
}

private int sendServerMessage(CommandContext context, String message) {
context.getSource().sendSuccess((Supplier) Component.literal("[SERVER] " + message), false);
return Command.SINGLE_SUCCESS;
}

private int sendPlayerMessage(CommandContext context, ServerPlayer target, String message) {
target.sendSystemMessage(Component.literal("[Player] " + message));
return Command.SINGLE_SUCCESS;
}

private int sendMessage(CommandContext context, ServerPlayer target, String sender, String message) {
target.sendSystemMessage(Component.literal(sender + ": " + message).setStyle(Style.EMPTY.withItalic(true).withColor(TextColor.fromRgb(0xA9A9A9))));
return Command.SINGLE_SUCCESS;
}
}

build.gradle:
plugins {
id 'eclipse'
id 'idea'
id 'net.minecraftforge.gradle' version '[6.0.16,6.2)'
}

group = mod_group_id
version = mod_version

base {
archivesName = mod_id
}

java {
toolchain.languageVersion = JavaLanguageVersion.of(21)
}

minecraft {
// The mappings can be changed at any time and must be in the following format.
// Channel: Version:
// official MCVersion Official field/method names from Mojang mapping files
// parchment YYYY.MM.DD-MCVersion Open community-sourced parameter names and javadocs layered on top of official
//
// You must be aware of the Mojang license when using the 'official' or 'parchment' mappings.
// See more information here: https://github.com/MinecraftForge/MCPCo ... /Mojang.md
//
// Parchment is an unofficial project maintained by ParchmentMC, separate from MinecraftForge
// Additional setup is needed to use their mappings: https://parchmentmc.org/docs/getting-started
//
// Use non-default mappings at your own risk. They may not always work.
// Simply re-run your setup task after changing the mappings to update your workspace.
mappings channel: mapping_channel, version: mapping_version

// When true, this property will have all Eclipse/IntelliJ IDEA run configurations run the "prepareX" task for the given run configuration before launching the game.
// In most cases, it is not necessary to enable.
// enableEclipsePrepareRuns = true
// enableIdeaPrepareRuns = true

// This property allows configuring Gradle's ProcessResources task(s) to run on IDE output locations before launching the game.
// It is REQUIRED to be set to true for this template to function.
// See https://docs.gradle.org/current/dsl/org ... urces.html
copyIdeResources = true

// When true, this property will add the folder name of all declared run configurations to generated IDE run configurations.
// The folder name can be set on a run configuration using the "folderName" property.
// By default, the folder name of a run configuration is the name of the Gradle project containing it.
// generateRunFolders = true

// This property enables access transformers for use in development.
// They will be applied to the Minecraft artifact.
// The access transformer file can be anywhere in the project.
// However, it must be at "META-INF/accesstransformer.cfg" in the final mod jar to be loaded by Forge.
// This default location is a best practice to automatically put the file in the right place in the final jar.
// See https://docs.minecraftforge.net/en/late ... nsformers/ for more information.
// accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')

// Default run configurations.
// These can be tweaked, removed, or duplicated as needed.
runs {
// applies to all the run configs below
configureEach {
workingDirectory project.file('run')

// Recommended logging data for a userdev environment
// The markers can be added/remove as needed separated by commas.
// "SCAN": For mods scan.
// "REGISTRIES": For firing of registry events.
// "REGISTRYDUMP": For getting the contents of all registries.
property 'forge.logging.markers', 'REGISTRIES'

// Recommended logging level for the console
// You can set various levels here.
// Please read: https://stackoverflow.com/questions/203 ... log-levels
property 'forge.logging.console.level', 'debug'
}

client {
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
property 'forge.enabledGameTestNamespaces', mod_id
}

server {
property 'forge.enabledGameTestNamespaces', mod_id
args '--nogui'
}

// This run config launches GameTestServer and runs all registered gametests, then exits.
// By default, the server will crash when no gametests are provided.
// The gametest system is also enabled by default for other run configs under the /test command.
gameTestServer {
property 'forge.enabledGameTestNamespaces', mod_id
}

data {
// example of overriding the workingDirectory set in configureEach above
workingDirectory project.file('run-data')

// Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
}
}
}

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

repositories {
// Put repositories for dependencies here
// ForgeGradle automatically adds the Forge maven and Maven Central for you

// If you have mod jar dependencies in ./libs, you can declare them as a repository like so.
// See https://docs.gradle.org/current/usergui ... r_resolver
// flatDir {
// dir 'libs'
// }
}

dependencies {
// Specify the version of Minecraft to use.
// Any artifact can be supplied so long as it has a "userdev" classifier artifact and is a compatible patcher artifact.
// The "userdev" classifier will be requested and setup by ForgeGradle.
// If the group id is "net.minecraft" and the artifact id is one of ["client", "server", "joined"],
// then special handling is done to allow a setup of a vanilla dependency without the use of an external repository.
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"

// Example mod dependency with JEI - using fg.deobf() ensures the dependency is remapped to your development mappings
// The JEI API is declared for compile time use, while the full JEI artifact is used at runtime
// compileOnly fg.deobf("mezz.jei:jei-${mc_version}-common-api:${jei_version}")
// compileOnly fg.deobf("mezz.jei:jei-${mc_version}-forge-api:${jei_version}")
// runtimeOnly fg.deobf("mezz.jei:jei-${mc_version}-forge:${jei_version}")

// Example mod dependency using a mod jar from ./libs with a flat dir repository
// This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar
// The group id is ignored when searching -- in this case, it is "blank"
// implementation fg.deobf("blank:coolmod-${mc_version}:${coolmod_version}")

// For more info:
// http://www.gradle.org/docs/current/user ... orial.html
// http://www.gradle.org/docs/current/user ... ement.html

// Hack fix for now, force jopt-simple to be exactly 5.0.4 because Mojang ships that version, but some transtive dependencies request 6.0+
implementation('net.sf.jopt-simple:jopt-simple:5.0.4') { version { strictly '5.0.4' } }
}

// This block of code expands all declared replace properties in the specified resource targets.
// A missing property will result in an error. Properties are expanded using ${} Groovy notation.
// When "copyIdeResources" is enabled, this will also run before the game launches in IDE environments.
// See https://docs.gradle.org/current/dsl/org ... urces.html
tasks.named('processResources', ProcessResources).configure {
var replaceProperties = [minecraft_version : minecraft_version, minecraft_version_range: minecraft_version_range,
forge_version : forge_version, forge_version_range: forge_version_range,
loader_version_range: loader_version_range,
mod_id : mod_id, mod_name: mod_name, mod_license: mod_license, mod_version: mod_version,
mod_authors : mod_authors, mod_description: mod_description,]

inputs.properties replaceProperties

filesMatching(['META-INF/mods.toml', 'pack.mcmeta']) {
expand replaceProperties + [project: project]
}
}

// Example for how to get properties into the manifest for reading at runtime.
tasks.named('jar', Jar).configure {
manifest {
attributes(["Specification-Title" : mod_id,
"Specification-Vendor" : mod_authors,
"Specification-Version" : "1", // We are version 1 of ourselves
"Implementation-Title" : project.name,
"Implementation-Version" : project.jar.archiveVersion,
"Implementation-Vendor" : mod_authors,
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")])
}

// This is the preferred method to reobfuscate your jar file
finalizedBy 'reobfJar'
}

tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
}

// Merge the resources and classes into the same directory.
// This is done because java expects modules to be in a single directory.
// And if we have it in multiple we have to do performance intensive hacks like having the UnionFileSystem
// This will eventually be migrated to ForgeGradle so modders don't need to manually do it. But that is later.
sourceSets.each {
def dir = layout.buildDirectory.dir("sourcesSets/$it.name")
it.output.resourcesDir = dir
it.java.destinationDirectory = dir
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... ctly-error
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Мод Forge 1.21.1 загружается неправильно, ошибка
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • База данных SQLITE не загружается в мод Minecraft Forge
    Anonymous » » в форуме JAVA
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Forge Java Modding, добавляющий mysql-connector-java в мод
    Гость » » в форуме JAVA
    0 Ответы
    41 Просмотры
    Последнее сообщение Гость
  • Изменения, внесенные в мод Forge Minecraft, не отображаются в тестовом клиенте
    Anonymous » » в форуме JAVA
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Среда выполнения Java обнаружила фатальную ошибку при запуске любого мода Forge в Forge.
    Anonymous » » в форуме JAVA
    0 Ответы
    98 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»