This commit is contained in:
叁玖领域 2024-09-25 15:37:06 +08:00
commit 29a1d0c187
15 changed files with 1132 additions and 0 deletions

5
.gitattributes vendored Normal file
View File

@ -0,0 +1,5 @@
# Disable autocrlf on generated files, they always generate with LF
# Add any extra files or paths here to make git stop saying they
# are changed when only line endings change.
src/generated/**/.cache/cache text eol=lf
src/generated/**/*.json text eol=lf

25
.gitignore vendored Normal file
View File

@ -0,0 +1,25 @@
# eclipse
bin
*.launch
.settings
.metadata
.classpath
.project
# idea
out
*.ipr
*.iws
*.iml
.idea
# gradle
build
.gradle
# other
eclipse
run
# Files from Forge MDK
forge*changelog.txt

65
CREDITS.txt Normal file
View File

@ -0,0 +1,65 @@
Minecraft Forge: Credits/Thank You
Forge is a set of tools and modifications to the Minecraft base game code to assist
mod developers in creating new and exciting content. It has been in development for
several years now, but I would like to take this time thank a few people who have
helped it along it's way.
First, the people who originally created the Forge projects way back in Minecraft
alpha. Eloraam of RedPower, and SpaceToad of Buildcraft, without their acceptiance
of me taking over the project, who knows what Minecraft modding would be today.
Secondly, someone who has worked with me, and developed some of the core features
that allow modding to be as functional, and as simple as it is, cpw. For developing
FML, which stabelized the client and server modding ecosystem. As well as the base
loading system that allows us to modify Minecraft's code as elegently as possible.
Mezz, who has stepped up as the issue and pull request manager. Helping to keep me
sane as well as guiding the community into creating better additions to Forge.
Searge, Bspks, Fesh0r, ProfMobious, and all the rest over on the MCP team {of which
I am a part}. For creating some of the core tools needed to make Minecraft modding
both possible, and as stable as can be.
On that note, here is some specific information of the MCP data we use:
* Minecraft Coder Pack (MCP) *
Forge Mod Loader and Minecraft Forge have permission to distribute and automatically
download components of MCP and distribute MCP data files. This permission is not
transitive and others wishing to redistribute the Minecraft Forge source independently
should seek permission of MCP or remove the MCP data files and request their users
to download MCP separately.
And lastly, the countless community members who have spent time submitting bug reports,
pull requests, and just helping out the community in general. Thank you.
--LexManos
=========================================================================
This is Forge Mod Loader.
You can find the source code at all times at https://github.com/MinecraftForge/MinecraftForge/tree/1.12.x/src/main/java/net/minecraftforge/fml
This minecraft mod is a clean open source implementation of a mod loader for minecraft servers
and minecraft clients.
The code is authored by cpw.
It began by partially implementing an API defined by the client side ModLoader, authored by Risugami.
http://www.minecraftforum.net/topic/75440-
This support has been dropped as of Minecraft release 1.7, as Risugami no longer maintains ModLoader.
It also contains suggestions and hints and generous helpings of code from LexManos, author of MinecraftForge.
http://www.minecraftforge.net/
Additionally, it contains an implementation of topological sort based on that
published at http://keithschwarz.com/interesting/code/?dir=topological-sort
It also contains code from the Maven project for performing versioned dependency
resolution. http://maven.apache.org/
It also contains a partial repackaging of the javaxdelta library from http://sourceforge.net/projects/javaxdelta/
with credit to it's authors.
Forge Mod Loader downloads components from the Minecraft Coder Pack
(http://mcp.ocean-labs.de/index.php/Main_Page) with kind permission from the MCP team.

9
LICENSE.txt Normal file
View File

@ -0,0 +1,9 @@
The MIT License (MIT)
Copyright (c) 3944Realms And BF_Meow
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

1
README.txt Normal file
View File

@ -0,0 +1 @@
# H

205
build.gradle Normal file
View File

@ -0,0 +1,205 @@
buildscript {
repositories {
// These repositories are only for Gradle plugins, put any other repositories in the repository block further below
maven { url = 'https://maven.minecraftforge.net' }
mavenCentral()
}
dependencies {
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true
}
}
// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
plugins {
id 'eclipse'
id 'maven-publish'
}
apply plugin: 'net.minecraftforge.gradle'
version = '1.0'
group = 'com.yourname.modid' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = 'modid'
// Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17.
java.toolchain.languageVersion = JavaLanguageVersion.of(17)
println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}"
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/MCPConfig/blob/master/Mojang.md
//
// Parchment is an unofficial project maintained by ParchmentMC, separate from MinecraftForge
// Additional setup is needed to use their mappings: https://github.com/ParchmentMC/Parchment/wiki/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: 'official', version: '1.18.2'
// accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') // Currently, this location cannot be changed from the default.
// Default run configurations.
// These can be tweaked, removed, or duplicated as needed.
runs {
client {
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/2031163/when-to-use-the-different-log-levels
property 'forge.logging.console.level', 'debug'
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
property 'forge.enabledGameTestNamespaces', 'examplemod'
mods {
examplemod {
source sourceSets.main
}
}
}
server {
workingDirectory project.file('run')
property 'forge.logging.markers', 'REGISTRIES'
property 'forge.logging.console.level', 'debug'
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
property 'forge.enabledGameTestNamespaces', 'examplemod'
mods {
examplemod {
source sourceSets.main
}
}
}
// 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 {
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/2031163/when-to-use-the-different-log-levels
property 'forge.logging.console.level', 'debug'
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
property 'forge.enabledGameTestNamespaces', 'examplemod'
mods {
examplemod {
source sourceSets.main
}
}
}
data {
workingDirectory project.file('run')
property 'forge.logging.markers', 'REGISTRIES'
property 'forge.logging.console.level', 'debug'
// Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
args '--mod', 'examplemod', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
mods {
examplemod {
source sourceSets.main
}
}
}
}
}
// 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:
// flatDir {
// dir 'libs'
// }
}
dependencies {
// Specify the version of Minecraft to use. If this is any group other than 'net.minecraft', it is assumed
// that the dep is a ForgeGradle 'patcher' dependency, and its patches will be applied.
// The userdev artifact is a special name and will get all sorts of transformations applied to it.
minecraft 'net.minecraftforge:forge:1.18.2-40.1.54'
// Real mod deobf dependency examples - these get remapped to your current mappings
// compileOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}:api") // Adds JEI API as a compile dependency
// runtimeOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}") // Adds the full JEI mod as a runtime dependency
// implementation fg.deobf("com.tterrag.registrate:Registrate:MC${mc_version}-${registrate_version}") // Adds registrate as a dependency
// Examples using mod jars from ./libs
// implementation fg.deobf("blank:coolmod-${mc_version}:${coolmod_version}")
// For more info...
// http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
// http://www.gradle.org/docs/current/userguide/dependency_management.html
}
// Example for how to get properties into the manifest for reading at runtime.
jar {
manifest {
attributes([
"Specification-Title" : "examplemod",
"Specification-Vendor" : "examplemodsareus",
"Specification-Version" : "1", // We are version 1 of ourselves
"Implementation-Title" : project.name,
"Implementation-Version" : project.jar.archiveVersion,
"Implementation-Vendor" : "examplemodsareus",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
])
}
}
// Example configuration to allow publishing using the maven-publish plugin
// This is the preferred method to reobfuscate your jar file
jar.finalizedBy('reobfJar')
// However if you are in a multi-project build, dev time needs unobfed jar files, so you can delay the obfuscation until publishing by doing
// publish.dependsOn('reobfJar')
publishing {
publications {
mavenJava(MavenPublication) {
artifact jar
}
}
repositories {
maven {
url "file://${project.projectDir}/mcmodsrepo"
}
}
}
tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
}

339
changelog.txt Normal file
View File

@ -0,0 +1,339 @@
1.18.x Changelog
40.1
====
- 40.1.54 [1.18.x] Allow safely registering RenderType predicates at any time (#8671)
* Allow safely registering RenderType predicates at any time
* Requested changes
- 40.1.53 Add Filtered Message to ServerChatEvent
- 40.1.52 [1.18] Make ConfigValue implement Supplier. (#8777)
- 40.1.51 Make IVertexConsumers such as the lighting pipeline, be aware of which format they are dealing with (#8665)
Also fix Lighting pipeline ignoring the overlay coords from the block renderer.
- 40.1.50 Revert "TeamCity change in 'MinecraftForge / MinecraftForge' project: build features of 'Build' build configuration were updated"
This reverts commit 0cc85bc314c8c90f1bdb24d77c7035bb09150489.
- 40.1.49 TeamCity change in 'MinecraftForge / MinecraftForge' project: build features of 'Build' build configuration were updated
- 40.1.48 [1.18.x] Fix #8530 (Banner Pattern) NPE (#8666)
- 40.1.47 Revert "[1.18.x] Enable the Forge light pipeline by default (#8629)" (#8663)
- 40.1.46 Fix eager loading of model loaders during datagen causing NPE (#8659)
- 40.1.45 [1.18.x] Fix 2 crossbow animations not applying to custom variants (#8625)
- 40.1.44 [1.18.x] Added new Disconnection screen to display better channel/registry mismatch information (#8402)
Co-authored-by: Curle <42079760+TheCurle@users.noreply.github.com>
- 40.1.43 [1.18] Avoid exclusive synchronisation in block render type lookups (#8476)
- 40.1.42 [1.18] Fix command redirects by replacing Commands#fillUsableCommands (#8616)
Commands#fillUsableCommands does not handle redirect nodes properly. It
blindly pulls from the cached node map for a redirect node, which may
have no result because the target node of the redirect has not been
visited yet.
CommandHelper#mergeCommandNode is better in this regard, because it
visits the target node of the redirect instead of blindly pulling from
the node map.
Fixes #7551
- 40.1.41 [1.18] Fix tags command suggestion to include dynamic registries (#8638)
Manually entering the names of dynamic registries work as expected. The
suggestions for registries didn't include dynamic registries because
they queried the static registries rather than querying all registries
from the server's `RegistryAccess` (which includes both static
registries and dynamic registries).
- 40.1.40 Low code language provider (#8633)
Co-authored-by: Curle <42079760+TheCurle@users.noreply.github.com>
- 40.1.39 [1.18.x] Add checkJarCompatibility task (#8644)
- 40.1.38 [1.18.x] Fix Banner Patterns not being extensible (#8530)
Co-authored-by: Curle <42079760+TheCurle@users.noreply.github.com>
- 40.1.37 1.18.x Port BiomeDictionary over to biome tags (#8564)
- 40.1.36 [1.18.x] Enable the Forge light pipeline by default (#8629)
- 40.1.35 [1.18.x] Allow Modders to add custom data-pack registries through RegistryBuilder (#8630)
Co-authored-by: Silverminer007 <66484505+Silverminer007@users.noreply.github.com>
Co-authored-by: Curle <42079760+TheCurle@users.noreply.github.com>
- 40.1.34 [1.18] Allow custom rarities to directly modify the style (#8648)
- 40.1.33 [1.18] Fix reload listener registration in ModelLoaderRegistry (#8650)
- 40.1.32 Fix wrong position in Level#hasChunk() call in IForgeBlockGetter (#8654)
- 40.1.31 Add ItemStack context to Enchantment#getDamageBonus (#8635)
- 40.1.30 Fix attack cooldown bar showing when out of reach of target. Closes #8639 (#8640)
- 40.1.29 Improve TagsUpdatedEvent by adding update case information. (#8636)
- 40.1.28 Deprecate patched-in Style methods for removal, vanilla variants exist. (#8615)
- 40.1.27 Add pack-type-specific format versions in pack metadata. Fixes #8563 (#8612)
- 40.1.26 Catch and aggregate exceptions during NewRegistryEvent (#8601)
- 40.1.25 Added removeErroringEntities config option (#8627)
Counterpart to removeErroringBlockEntities
- 40.1.24 Add missing patches for not lowering mipmap level for small textures (#8622)
- 40.1.23 Make TransformType enum extensible, includes the possibility to specify a fallback type for cases where models don't specify the transform explicitly. (#8566)
Makes it possible to add new perspectives.
- 40.1.22 Fix CheckSAS to actually validate that the SAS line will do something.
This removes all method level lines as they are not necessary now.
- 40.1.21 Add Attack Range attribute and Update Reach Distance (#8478)
- 40.1.20 Implement PlayerNegotiationEvent (#8599)
- 40.1.19 Fire EntityTravelToDimensionEvent in all expected cases (#8614)
Fixes #8520
- 40.1.18 Fix isEdible crash (#8613)
Fixes #8602
- 40.1.17 Fix typo in Snow Golem patch causing them to destroy blocks they shouldn't. Closes #8611
- 40.1.16 Re-introduce an attribute for entity step height in a non-breaking way (#8607)
- 40.1.15 Revert step height attribute (#8604)
- 40.1.14 [1.18.x] Fix ContextNbtProvider serializing the wrong name (#8575)
- 40.1.13 Let BaseRailBlock decide if the calculated RailShape for placement or connection to neighbors is valid (#8562)
- 40.1.12 Fix shears not playing a breakage sound (#8600)
- 40.1.11 Update IExtensionPoint javadoc to be correct (#8568)
- 40.1.10 Fix IDs of Multi-part entities being desynced across client and server. (#8576)
- 40.1.9 Expose ICondition$IContext to modded reload listeners. (#8596)
- 40.1.8 Fix undead causing chunkloading leading to extensive lag (#8583)
- 40.1.7 Accomodate Bukkit-like Servers not sending Command Args (#8582)
Note to modded server devs:
Please, please, please implement full compatibility with [Brigadier](https://github.com/Mojang/Brigadier) instead of hacking around it.
- 40.1.6 Restore translation key comments to ForgeConfigSpec (#8584)
- 40.1.5 Fix entity parts being ignored when collecting entities in an AABB (#8588)
Previously entity parts are only taken into consideration when the parent entity is in a chunk that intersects with the AABB
- 40.1.4 Fix EntityInteraction event running twice on client side (#8598)
- 40.1.3 Introduce an attribute for step height additions (#8389)
- 40.1.2 Fix shears passing on a client when interacting with a shearable entity (#8597)
Caused the offhand item to also interact with the entity, possibly sending a packet to the server causing both hands to interact
- 40.1.1 Allow Exception passed through CommandEvent to propagate (#8590)
- 40.1.0 Mark 1.18.2 Recommended Build.
Co-authored-by: sciwhiz12 <arnoldnunag12@gmail.com>
Co-authored-by: Marc Hermans <marc.hermans@ldtteam.com>
Co-authored-by: Curle <curle@gemwire.uk>
Co-authored-by: SizableShrimp <sizableshrimp@sizableshrimp.me>
Co-authored-by: David Quintana <gigaherz@gmail.com>
40.0
====
- 40.0.54 Add event for hooking into StructuresBecomeConfiguredFix Fixes #8505
Pass-through unknown structure IDs with "unknown." prefix
This avoids the fixer throwing an exception due to the unknown
structure, which causes the chunk data to be dropped (and freshly
regenerated later). The deserializer logs and ignores the unknown
structure ID, avoiding full chunk data loss.
- 40.0.53 Fix missed patch for loading modded dimensions on Dedicated Server start (#8555)
- 40.0.52 Fix potential concurrency issues with BiomeDictionary. Closes #8266
- 40.0.51 Fix debug text being rendered slightly wrong.
- 40.0.50 Fix intrusive handlers on dummy objects.
- 40.0.49 Amend license header to include contributors and apply to FML subprojects (#8525)
After internal discussion, it was decided that we need to include
"contributors" to the license header. This avoids claiming that the
Java source files are under the exclusive copyright ownership of Forge
LLC, which excludes contributors that still hold copyright ownership
over their contributions (but is licensed under the LGPLv2.1 as stated
in the Forge CLA).
- 40.0.48 Add modern implementation of the Slider widget and deprecate the old one (#8496)
- 40.0.47 Implement ItemStack and LivingEntity sensitive method to get the FoodProperties for an Item (#8477)
- 40.0.46 Add use context and simulate flag to getToolModifiedState, enabled HOE_TILL action. (#8557)
- 40.0.45 Remove bad patch for AbstractFurnaceBlockEntity (#8561)
The patch prevented the entity from being marked as changed when an
item finished smelting.
- 40.0.44 Fix issues with custom forge ingredients causing sub ingredients to be prematurely and invalidly cached (#8550)
Add config option and skip checking for empty ingredients in shapeless recipe deserialization
- 40.0.43 Add EnderManAngerEvent to make it possible to prevent endermen getting angry at a player based on more then their helmet. (#8406)
- 40.0.42 Fix misaligned patch in BlockEntity.save.
- 40.0.41 Expose `getHolder()` method on RegistryObject, as helper for when absolutely necessary to pass into Vanilla code. (#8548)
It is recommended you avoid if you can.
- 40.0.40 Fix return value of Recipe#isIncomplete being inaccurate for empty tags (#8549)
- 40.0.39 Simplfy default behavior of isSimple (#8543)
isSimple should only return true if the ingredient is any more sensitive then JUST itemA == itemB
It used to take metadata and damage into account, but that was removed in the flattening.
Also prevents fetching tag values too early, as tags are not ready during the ingredient constructor
- 40.0.38 Implement IPlantable in BambooBlock (#8508)
- 40.0.37 Fix compiler error in eclipse, bump MCPConfig for FF/Record fix.
- 40.0.36 Fix TagEmptyCondition by passing tag context into conditional and recipe deserializers. (#8546)
- 40.0.35 Allow using DeferredRegisters for vanilla registries (#8527)
Catch and aggregate exceptions when applying object holders
- 40.0.34 Remove cut copper from copper storage blocks tag. Closes #8403 (#8539)
- 40.0.33 Fix brewing stand input placement not auto-splitting stackable potions. (#8534)
- 40.0.32 Fix lost validation of registry data on singleplayer world load (#8533)
Fix some leftover 1.18.2 TODOs
- 40.0.31 1.18 Allow mod menus to have their own recipebook (#8028)
- 40.0.30 [1.18.x] Add 3 new ingredient types, and make existing ingredients compatible with datagen (#8517)
- 40.0.29 [1.18.x] Add the projectile search event. (#8322)
Co-authored-by: noeppi_noeppi <noeppinoeppi@gmail.com>
- 40.0.28 Allow confirm-and-save of the Experimental Settings warning. (#7275)
- 40.0.27 Add hook for powdered-snow shoes (#8514)
- 40.0.26 Add some helper Access Transformers (#8490)
- 40.0.25 Fix incorrect method used in getStream (#8532)
The original correct method is getPath, but the patch uses getLocation.
The former is the actual resource path to the sound OGG file, while the
latter is the sound's location.
Fixes #8531
- 40.0.24 [1.18] Make it easier to register custom skull blocks models (#8351)
- 40.0.23 Rework fog events (#8492)
- 40.0.22 Update Forge Auto Renaming Tool to the latest version (#8515)
- 40.0.21 Add patches to enable MobEffects with IDs > 255 (#8380)
- 40.0.20 Allow sound instances to play custom audio streams (#8295)
- 40.0.19 Fix NPE caused by canceling onServerChatEvent (#8516)
- 40.0.18 [1.18.2] Fix tags for custom forge registries. (#8495)
Tag-enabled registries must now be registered to vanilla's root registry. See RegistryBuilder#hasTags.
Modded tag-enabled registries have to use the format `data/<namespace>/tags/<registrynamespace>/<registryname>/<tag>.json`
This format is to prevent conflicts for registries with the same path but different namespaces
EX: Registry name `examplemod:shoe`, tag name `blue_shoes` would be `data/<namespace>/tags/examplemod/shoe/blue_shoes.json`
RegistryEvent.NewRegistry has been moved and renamed to NewRegistryEvent.
RegistryBuilder#create has been made private. See NewRegistryEvent#create
Created new ITagManager system for looking up Forge tags. See IForgeRegistry#tags.
Add lookup methods for Holders from forge registries. See IForgeRegistry#getHolder.
- 40.0.17 Lower custom item entity replacement from highest to high so mods can cancel it during a specific tick (#8417)
- 40.0.16 Fix MC-176559 related to the Mending enchantment (#7606)
- 40.0.15 [1.18.x] Allow blocks to hide faces on a neighboring block (#8300)
* Allow blocks to hide faces on a neighboring block
* Allow blocks to opt-out of external face hiding
- 40.0.14 [1.18.x] Fix FMLOnly in forgedev and userdev (#8512)
- 40.0.13 Clear local variable table on RuntimeEnumExtender transformation (#8502)
- 40.0.12 Pass server resources to reload listener event (#8493)
- 40.0.11 Use UTF-8 charset for Java compilation (#8486)
- 40.0.10 Use wither as griefing entity when it indirectly hurts an entity (#8431)
- 40.0.9 Provide access to the haveTime supplier in WorldTickEvent and ServerTickEvent (#8470)
- 40.0.8 Fix durability bar not respecting an item's custom max damage (#8482)
- 40.0.7 Add event for controlling potion indicators size (#8483)
This event allows forcing the rendering of the potion indicators in the
inventory screen to either compact mode (icons only) or classic mode
(full width with potion effect name).
- 40.0.6 Introduce system mods to mod loading (#8238)
Core game mods are mods which are required to exist in the environment
during mod loading. These may be specially provided mods (for example,
the `minecraft` mod), or mods which are vital to the framework which
FML is connected to (for example, Forge and the `forge` mod).
These core game mods are used as the only existing mods in the mod list
if mod sorting or dependency verification fails. This allows later
steps in the which use resources from these mod files to work correctly
(up to when the error screen is shown and the game exits).
- 40.0.5 Add missing module exports arg to server arguments list (#8500)
- 40.0.4 Fixed swim speed attribute (#8499)
- 40.0.3 Fix incorrect movement distance calculation (#8497)
- 40.0.2 Add support to Forge registry wrappers for new Holder system. Closes #8491
Fix TagBasedToolTypesTest not generating needed data correctly.
- 40.0.1 Fix JNA not working at runtime and causing issues with natives.
- 40.0.0 Update to 1.18.2
Co-authored-by: sciwhiz12 <arnoldnunag12@gmail.com>
Co-authored-by: Marc Hermans <marc.hermans@ldtteam.com>
Co-authored-by: LexManos <LexManos@gmail.com>
Co-authored-by: Curle <curle@gemwire.uk>
39.1
====
- 39.1.2 1.18.x Omnibus (#8239)
- 39.1.1 Bump modlauncher and securejarhandler version (#8489)
- 39.1.0 Update license headers to compact SPDX format.
License has not changed, this is just more compact and doesn't include years.
Bump version for RB.
39.0
====
- 39.0.91 Remove - from allowed characters in mod ids.
The Java Module System does not allow them in module ids.
Closes #8488
- 39.0.90 Fix static initializer crash when loading BakedRenderable.
- 39.0.89 Fix regressions for onAddedTo/RemovedFromWorld and related events (#8434)
- 39.0.88 [1.18] Integrate the gametest framework with Forge (#8225)
- 39.0.87 Re-add missing Shulker patch for EntityTeleportEvent (#8481)
- 39.0.86 Fix entity type in conversion event to Drowned (#8479)
- 39.0.85 Add VanillaGameEvent to allow for globally listening to vanilla's GameEvents (#8472)
- 39.0.84 Provide damage source context to Item#onDestroyed(ItemEntity) (#8473)
- 39.0.83 Add missing shear and elytra game events (#8471)
- 39.0.82 Fix comment for permission handler config setting (#8466)
- 39.0.81 Apply nullable annotations to LootingLevelEvent (#8422)
- 39.0.80 Fix Mob Spawner logic with CustomSpawnRules. Closes #8398
- 39.0.79 Fix LivingDropsEvent not having all drops for foxes (#8387)
- 39.0.78 Add missing Locale parameter to String.format calls, Fixes getArmorResource functionality on some locaales. (#8463)
- 39.0.77 Allow items to hide parts of their tooltips by default (#8358)
- 39.0.76 Prevent 1.x Branches being treated as Pull Requests. (#8443)
- 39.0.75 Fix RegistryObject not working if created after registry events (#8383)
- 39.0.74 Add support for tagging StructureFeatures (#8408)
- 39.0.73 Re-added the patch for LivingExperienceDropEvent and enable it for dragons (#8388)
- 39.0.72 Implement getPickupSound on ForgeFlowingFluid (#8374)
- 39.0.71 Add getCodec method in ForgeRegistry (#8333)
- 39.0.70 Fix #8298 (MobBucketItem) and add test mod (#8313)
- 39.0.69 Deprecate IForgeAbstractMinecart::getCartItem (#8283)
- 39.0.68 Fix HoeItem patch incorrectly applied during migration. (#8384)
- 39.0.67 Fix issues with client only commands in combination with server only commands not using MC's command system. (#8452)
- 39.0.66 Fix FoliagePlacerType and TreeDecoratorType registry (#8394)
- 39.0.65 Fix PlayerChangeGameModeEvent (#8441)
- 39.0.64 Fix comparison of custom ParticleRenderTypes leading to broken particle effects. (#8385)
- 39.0.63 Fix cases where null is potentially sent to Screen events. Closes #8432
- 39.0.62 Ensure ScreenEvent doesn't accept null screens (#8296)
- 39.0.61 Update cobblestone tags (#8292)
- 39.0.60 Prevent release of custom payload packet buffer on the server side. (#8181)
- 39.0.59 Make `MinecraftLocator` respect non-`MOD` FML Mod Types Fixes #8344 (#8346)
- 39.0.58 Fix vanilla worlds being marked experimental (#8415)
- 39.0.57 Simplify usage of IItemRenderProperties::getArmorModel (#8349)
- 39.0.56 Hide mod update notification while screen is still fading in (#8386)
- 39.0.55 Revert "Hooks to allow registering and managing custom DFU schemes and types. (#8242)"
- 39.0.54 Provide NPE protection against out of order init of the TYPES and REF (#8410)
- 39.0.53 Add ShieldBlockEvent (#8261)
- 39.0.52 Add renderable API to allow easier rendering of OBJ and other custom models, from Entity and BlockEntity renderers. (#8259)
This is a redesign of a discarded section of my initial model system rewrite, back in 1.14.
In order to use it with the OBJ loader, you can use OBJLoader.INSTANCE.loadModel to get the OBJModel, and then call OBJModel#bakeRenderable() to get a SimpleRenderable object to render with.
The SimpleRenderable support animation, by providing different transformation matrices for each part in the MultipartTransforms.
Additionally, a BakedRenderable helper exists to turn an arbitrary BakedModel into a renderable.
After trying to get the B3D loader to work, I decided it wasn't worth the trouble and marked it for removal instead.
- 39.0.51 Merge values of defaulted optional tags, Fixes issue where multiple mods declare the same optional tag. (#8250)
- 39.0.50 Added new 1.18 biomes to the BiomeDictionary (#8246)
- 39.0.49 Hooks to allow registering and managing custom DFU schemes and types. (#8242)
- 39.0.48 Ping data compression (#8169)
- 39.0.47 Expand the LevelStem codec to allow dimension jsons to specify that the dimension's chunk generator should use the overworld/server's seed (#7955)
- 39.0.46 Add Client Commands (#7754)
- 39.0.45 Remove references to the now-broken `BlockEntity#save(CompoundTag)` method (#8235)
- 39.0.44 update McModLauncher libraries to newer versions...
- 39.0.43 add extra keystore properties
- 39.0.42 TeamCity change in 'MinecraftForge / MinecraftForge' project: project parameters were changed
- 39.0.41 TeamCity change in 'MinecraftForge / MinecraftForge' project: project parameters were changed
- 39.0.40 TeamCity change in 'MinecraftForge / MinecraftForge' project: project parameters were changed
- 39.0.39 TeamCity change in 'MinecraftForge / MinecraftForge' project: project parameters were changed
- 39.0.38 TeamCity change in 'MinecraftForge / MinecraftForge' project: project parameters were changed
- 39.0.37 TeamCity change in 'MinecraftForge / MinecraftForge' project: project parameters were changed
- 39.0.36 fix crowdin key
- 39.0.35 TeamCity change in 'MinecraftForge / MinecraftForge' project: project parameters were changed
- 39.0.34 TeamCity change in 'MinecraftForge / MinecraftForge' project: project parameters were changed
- 39.0.33 TeamCity change in 'MinecraftForge / MinecraftForge' project: project parameters were changed
- 39.0.32 fix secondary branches builds
- 39.0.31 TeamCity change in 'MinecraftForge / MinecraftForge' project: parameters of 'Build - Secondary Branches' build configuration were updated
- 39.0.30 TeamCity change in 'MinecraftForge / MinecraftForge' project: VCS roots of 'Build - Secondary Branches' build configuration were updated
- 39.0.29 TeamCity change in 'MinecraftForge / MinecraftForge' project: VCS roots of 'Build - Secondary Branches' build configuration were updated
- 39.0.28 TeamCity change in 'MinecraftForge / MinecraftForge' project: VCS roots of 'Build - Secondary Branches' build configuration were updated
- 39.0.27 TeamCity change in 'MinecraftForge / MinecraftForge' project: parameters of 'Build - Secondary Branches' build configuration were updated
- 39.0.26 TeamCity change in 'MinecraftForge / MinecraftForge' project: parameters of 'Build - Secondary Branches' build configuration were updated
- 39.0.25 TeamCity change in 'MinecraftForge / MinecraftForge' project: VCS roots of 'Build - Secondary Branches' build configuration were updated
- 39.0.24 Remove primary branches from building on secondary branch configuration and publish crowdin data. (#8397)
* Remove the normalized branch names also from the filter.
* Add the additional publishing arguments to get the crowdin information.
* TeamCity change in 'MinecraftForge / MinecraftForge' project: project parameters were changed
* Fix the configuration.
* Remove the required patch and use the base script.
* Make a note about the reference.
Co-authored-by: cpw <cpw@weeksfamily.ca>
- 39.0.23 TeamCity change in 'MinecraftForge / MinecraftForge' project: project parameters were changed
- 39.0.22 Correct the build configuration to support a setup. (#8395)
* Add a setup task and publish the correct versions.
* Reconfigure build task and disable the normal build and test cycle on everything but pull requests, run an assemble there.
* Fix the derp in the build configuration.
- 39.0.21 Enable the TeamCity CI pipeline (#8368)
* Setup the build.gradle
* Setup the teamcity toolchain.
* Revert the usage of the local build of GU.
* Automatically add it now, it will always exist and is added to maven automatically by GU.
* Implement the branch filter and move the constant for the minimal changelog tag to a constant in the extension.
* Adding the JDK and Gradle version to the build script.
- 39.0.20 Fix and improve Ingredient invalidation (#8361)
- 39.0.19 Rework world persistence hooks to fix the double registry injection when loading single player worlds. (#8234)
- 39.0.18 Update tags for new 1.17 and 1.18 content (#7891)
- 39.0.17 Fix TerrainParticle rendering black under certain conditions (#8378)
- 39.0.16 Allow modded tools to work on glow lichen (#8371)
- 39.0.15 Fix custom climbable blocks not sending a death message (#8372)
Fixes #8370
- 39.0.14 Provide access to the blockstate in BucketPickup#getPickupSound for multiply-logged blocks (#8357)
- 39.0.13 Fix clients being unable to deserialize tags for custom registries (#8352)
- 39.0.12 Fix particles going fullbright for a few frames when first spawning (#8291)
- 39.0.11 Also create parent directories when creating config files (#8364)
- 39.0.10 Fix crash with PermissionsAPI (#8330)
Fixes a crash in singleplayer, when the internal server didn't shut down correctly between world loads.
- 39.0.9 Re-add missing default spawn lists in features (#8285)
Fixes #8265
Fixes #8301
- 39.0.8 Fixed incorrect generic in PermissionAPI (#8317)
- 39.0.7 Redo of the whole PermissionAPI (#7780)
Co-authored-by: LexManos <LexManos@gmail.com>
- 39.0.6 Fix misplaced patch in SpreadingSnowyDirtBlock.
Fixes #8308.
- 39.0.5 Add RenderArmEvent to make overriding just the arm rendering not require copying nearly as much vanilla code (#8254)
- 39.0.4 Add MobEffect tags (#8231)
- 39.0.3 Log missing or unsupported dependencies (#8218)
- 39.0.2 Fix datagen test for sounds definitions provider (#8249)
- 39.0.1 Fix wrong stage being declared in transition to common (#8267)
- 39.0.0 Update to 1.18.1
Co-Authored by:
- Curle
_ Orion

4
gradle.properties Normal file
View File

@ -0,0 +1,4 @@
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
# This is required to provide enough memory for the Minecraft decompilation process.
org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false

BIN
gradle/wrapper/gradle-wrapper.jar vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-7.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

234
gradlew vendored Normal file
View File

@ -0,0 +1,234 @@
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
warn () {
echo "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"

89
gradlew.bat vendored Normal file
View File

@ -0,0 +1,89 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@ -0,0 +1,81 @@
package com.example.examplemod;
import com.mojang.logging.LogUtils;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.InterModComms;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent;
import net.minecraftforge.fml.event.lifecycle.InterModProcessEvent;
import net.minecraftforge.event.server.ServerStartingEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.slf4j.Logger;
import java.util.stream.Collectors;
// The value here should match an entry in the META-INF/mods.toml file
@Mod("examplemod")
public class ExampleMod
{
// Directly reference a slf4j logger
private static final Logger LOGGER = LogUtils.getLogger();
public ExampleMod()
{
// Register the setup method for modloading
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
// Register the enqueueIMC method for modloading
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::enqueueIMC);
// Register the processIMC method for modloading
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::processIMC);
// Register ourselves for server and other game events we are interested in
MinecraftForge.EVENT_BUS.register(this);
}
private void setup(final FMLCommonSetupEvent event)
{
// some preinit code
LOGGER.info("HELLO FROM PREINIT");
LOGGER.info("DIRT BLOCK >> {}", Blocks.DIRT.getRegistryName());
}
private void enqueueIMC(final InterModEnqueueEvent event)
{
// Some example code to dispatch IMC to another mod
InterModComms.sendTo("examplemod", "helloworld", () -> { LOGGER.info("Hello world from the MDK"); return "Hello world";});
}
private void processIMC(final InterModProcessEvent event)
{
// Some example code to receive and process InterModComms from other mods
LOGGER.info("Got IMC {}", event.getIMCStream().
map(m->m.messageSupplier().get()).
collect(Collectors.toList()));
}
// You can use SubscribeEvent and let the Event Bus discover methods to call
@SubscribeEvent
public void onServerStarting(ServerStartingEvent event)
{
// Do something when the server starts
LOGGER.info("HELLO from server starting");
}
// You can use EventBusSubscriber to automatically subscribe events on the contained class (this is subscribing to the MOD
// Event bus for receiving Registry Events)
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public static class RegistryEvents
{
@SubscribeEvent
public static void onBlocksRegistry(final RegistryEvent.Register<Block> blockRegistryEvent)
{
// Register a new block here
LOGGER.info("HELLO from Register Block");
}
}
}

View File

@ -0,0 +1,62 @@
# This is an example mods.toml file. It contains the data relating to the loading mods.
# There are several mandatory fields (#mandatory), and many more that are optional (#optional).
# The overall format is standard TOML format, v0.5.0.
# Note that there are a couple of TOML lists in this file.
# Find more information on toml format here: https://github.com/toml-lang/toml
# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml
modLoader="javafml" #mandatory
# A version range to match for said mod loader - for regular FML @Mod it will be the forge version
loaderVersion="[40,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions.
# The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties.
# Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here.
license="All rights reserved"
# A URL to refer people to when problems occur with this mod
#issueTrackerURL="https://change.me.to.your.issue.tracker.example.invalid/" #optional
# A list of mods - how many allowed here is determined by the individual mod loader
[[mods]] #mandatory
# The modid of the mod
modId="examplemod" #mandatory
# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it
# ${file.jarVersion} will substitute the value of the Implementation-Version as read from the mod's JAR file metadata
# see the associated build.gradle script for how to populate this completely automatically during a build
version="${file.jarVersion}" #mandatory
# A display name for the mod
displayName="Example Mod" #mandatory
# A URL to query for updates for this mod. See the JSON update specification https://mcforge.readthedocs.io/en/latest/gettingstarted/autoupdate/
#updateJSONURL="https://change.me.example.invalid/updates.json" #optional
# A URL for the "homepage" for this mod, displayed in the mod UI
#displayURL="https://change.me.to.your.mods.homepage.example.invalid/" #optional
# A file name (in the root of the mod JAR) containing a logo for display
logoFile="examplemod.png" #optional
# A text field displayed in the mod UI
credits="Thanks for this example mod goes to Java" #optional
# A text field displayed in the mod UI
authors="Love, Cheese and small house plants" #optional
# The description text for the mod (multi line!) (#mandatory)
description='''
This is a long form description of the mod. You can write whatever you want here
Have some lorem ipsum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed mollis lacinia magna. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed sagittis luctus odio eu tempus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque volutpat ligula eget lacus auctor sagittis. In hac habitasse platea dictumst. Nunc gravida elit vitae sem vehicula efficitur. Donec mattis ipsum et arcu lobortis, eleifend sagittis sem rutrum. Cras pharetra quam eget posuere fermentum. Sed id tincidunt justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
'''
# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional.
[[dependencies.examplemod]] #optional
# the modid of the dependency
modId="forge" #mandatory
# Does this dependency have to exist - if not, ordering below must be specified
mandatory=true #mandatory
# The version range of the dependency
versionRange="[40,)" #mandatory
# An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
ordering="NONE"
# Side this dependency is applied on - BOTH, CLIENT or SERVER
side="BOTH"
# Here's another dependency
[[dependencies.examplemod]]
modId="minecraft"
mandatory=true
# This version range declares a minimum of the current minecraft version up to but not including the next major version
versionRange="[1.18.2,1.19)"
ordering="NONE"
side="BOTH"

View File

@ -0,0 +1,8 @@
{
"pack": {
"description": "examplemod resources",
"pack_format": 9,
"forge:resource_pack_format": 8,
"forge:data_pack_format": 9
}
}