mirror of
https://github.com/FabricMC/fabric.git
synced 2024-11-24 08:38:17 -05:00
Merge remote-tracking branch 'origin/1.15' into 1.15
This commit is contained in:
commit
2297c32bb1
6 changed files with 173 additions and 8 deletions
94
README.md
94
README.md
|
@ -1,7 +1,93 @@
|
|||
# Fabric
|
||||
# Fabric API
|
||||
|
||||
Essential hooks and patches for modding with Fabric.
|
||||
Essential hooks for modding with Fabric.
|
||||
|
||||
## Getting Started
|
||||
Fabric API is the library for essential hooks and interoperability mechanisms for Fabric mods. Examples include:
|
||||
|
||||
To setup a Fabric development environment, check out the [example fabric mod](https://github.com/FabricMC/fabric-example-mod) and follow the instructions there.
|
||||
- Exposing functionality that is useful but difficult to access for many mods such as particles, biomes and dimensions
|
||||
- Adding events, hooks and APIs to improve interopability between mods.
|
||||
- Essential features such as registry synchronization and adding information to crash reports.
|
||||
- An advanced rendering API designed for compatibility with optimization mods and graphics overhaul mods.
|
||||
|
||||
Also check out [Fabric Loader](https://github.com/FabricMC/fabric-loader), the (mostly) version-independent mod loader that powers Fabric. Fabric API is a mod like any other Fabric mod which requires Fabric Loader to be installed.
|
||||
|
||||
For support and discussion for both developers and users, visit [the Fabric Discord server](https://discord.gg/v6v4pMv).
|
||||
|
||||
## Using Fabric API to play with mods
|
||||
|
||||
Make sure you have install fabric loader first. More information about installing Fabric Loader can be found [here](https://fabricmc.net/use/).
|
||||
|
||||
To use Fabric API, download it from [CurseForge](https://www.curseforge.com/minecraft/mc-mods/fabric-api) or [GitHub Releases](https://github.com/FabricMC/fabric/releases).
|
||||
|
||||
The downloaded jar file should be placed in your `mods` folder.
|
||||
|
||||
## Using Fabric API to develop mods
|
||||
|
||||
To setup a Fabric development environment, check out the [Fabric example mod](https://github.com/FabricMC/fabric-example-mod) and follow the instructions there. The example mod already depends on Fabric API.
|
||||
|
||||
To include the full Fabric API with all modules in the development environment, add the following to your `dependencies` block in the gradle buildscript:
|
||||
|
||||
### Groovy DSL
|
||||
|
||||
```groovy
|
||||
modImplementation "net.fabricmc.fabric-api:fabric-api:FABRIC_API_VERSION"
|
||||
```
|
||||
|
||||
### Kotlin DSL
|
||||
|
||||
```kotlin
|
||||
modImplementation("net.fabricmc.fabric-api:fabric-api:FABRIC_API_VERSION")
|
||||
```
|
||||
|
||||
Alternatively, modules from Fabric API can be specified individually as shown below:
|
||||
|
||||
### Groovy DSL
|
||||
|
||||
```groovy
|
||||
// Make a collection of all api modules we wish to use
|
||||
Set<String> apiModules = [
|
||||
"fabric-api-base",
|
||||
"fabric-command-api-v1",
|
||||
"fabric-lifecycle-events-v1",
|
||||
"fabric-networking-v0"
|
||||
]
|
||||
|
||||
// Add each module as a dependency
|
||||
apiModules.forEach {
|
||||
modImplementation(fabricApi.module(it, FABRIC_API_VERSION))
|
||||
}
|
||||
```
|
||||
|
||||
### Kotlin DSL
|
||||
|
||||
```kotlin
|
||||
// Make a set of all api modules we wish to use
|
||||
setOf(
|
||||
"fabric-api-base",
|
||||
"fabric-command-api-v1",
|
||||
"fabric-lifecycle-events-v1",
|
||||
"fabric-networking-v0"
|
||||
).forEach {
|
||||
// Add each module as a dependency
|
||||
modImplementation(fabricApi.module(it, FABRIC_API_VERSION))
|
||||
}
|
||||
```
|
||||
|
||||
<!--Linked to gradle documentation on properties-->
|
||||
Instead of hardcoding version constants all over the build script, Gradle properties may be used to replace these constants. Properties are defined in the `gradle.properties` file at the root of a project. More information is available [here](https://docs.gradle.org/current/userguide/organizing_gradle_projects.html#declare_properties_in_gradle_properties_file).
|
||||
|
||||
## Contributing
|
||||
|
||||
See something Fabric API doesn't support, a bug or something that may be useful? We welcome contributions to improve Fabric API.
|
||||
|
||||
Check out [the Contributing guidelines](../CONTRIBUTING.md)*.
|
||||
|
||||
\* The contributing guidelines are work in progress
|
||||
|
||||
## Modules
|
||||
|
||||
Fabric API is designed to be modular for ease of updating. This also has the advantage of splitting up the codebase into smaller chunks.
|
||||
|
||||
Each module contains its own `README.md`* explaining the module's purpose and additional info on using the module.
|
||||
|
||||
\* The README for each module is being worked on; not every module has a README at the moment
|
||||
|
|
|
@ -18,7 +18,7 @@ plugins {
|
|||
def ENV = System.getenv()
|
||||
|
||||
class Globals {
|
||||
static def baseVersion = "0.21.0"
|
||||
static def baseVersion = "0.23.0"
|
||||
static def mcVersion = "1.15.2"
|
||||
static def yarnVersion = "+build.1"
|
||||
static def loaderVersion = "0.10.5+build.213"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
archivesBaseName = "fabric-object-builder-api-v1"
|
||||
version = getSubprojectVersion(project, "1.3.0")
|
||||
version = getSubprojectVersion(project, "1.3.1")
|
||||
|
||||
dependencies {
|
||||
compile project(path: ':fabric-api-base', configuration: 'dev')
|
||||
|
|
|
@ -47,7 +47,7 @@ public abstract class TypeAwareTradeMixin {
|
|||
/**
|
||||
* To prevent "item" -> "air" trades, if the result of a type aware trade is air, make sure no offer is created.
|
||||
*/
|
||||
@Inject(method = "create", at = @At(value = "NEW", target = "net/minecraft/village/TradeOffer"), locals = LocalCapture.CAPTURE_FAILEXCEPTION, cancellable = true)
|
||||
@Inject(method = "create(Lnet/minecraft/entity/Entity;Ljava/util/Random;)Lnet/minecraft/village/TradeOffer;", at = @At(value = "NEW", target = "net/minecraft/village/TradeOffer"), locals = LocalCapture.CAPTURE_FAILEXCEPTION, cancellable = true)
|
||||
private void failOnNullItem(Entity entity, Random random, CallbackInfoReturnable<TradeOffer> cir, ItemStack buyingItem) {
|
||||
if (buyingItem.isEmpty()) { // Will return true for an "empty" item stack that had null passed in the ctor
|
||||
cir.setReturnValue(null); // Return null to prevent creation of empty trades
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
archivesBaseName = "fabric-object-builders"
|
||||
version = getSubprojectVersion(project, "0.5.1")
|
||||
version = getSubprojectVersion(project, "0.6.0")
|
||||
|
||||
dependencies {
|
||||
compile project(path: ':fabric-api-base', configuration: 'dev')
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
/*
|
||||
* Copyright (c) 2016, 2017, 2018, 2019 FabricMC
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* http://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.
|
||||
*/
|
||||
|
||||
package net.fabricmc.fabric.api.world.v1.gen;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.biome.source.BiomeSource;
|
||||
import net.minecraft.world.gen.chunk.ChunkGenerator;
|
||||
import net.minecraft.world.gen.chunk.ChunkGeneratorConfig;
|
||||
import net.minecraft.world.gen.chunk.ChunkGeneratorType;
|
||||
|
||||
/**
|
||||
* Wrapper class that allows for {@link ChunkGeneratorType} creation.
|
||||
* The standard {@link ChunkGeneratorType} class constructor requires a {@link net.minecraft.world.gen.chunk.ChunkGeneratorFactory}, which is protected.
|
||||
*
|
||||
* @param <C> config of the {@link ChunkGenerator} stored by this type
|
||||
* @param <T> {@link ChunkGenerator} stored by this type
|
||||
*/
|
||||
public final class FabricChunkGeneratorType<C extends ChunkGeneratorConfig, T extends ChunkGenerator<C>> extends ChunkGeneratorType<C, T> {
|
||||
private final FabricChunkGeneratorFactory<C, T> factory;
|
||||
|
||||
private FabricChunkGeneratorType(FabricChunkGeneratorFactory<C, T> factory, boolean buffetScreenOption, Supplier<C> settingsSupplier) {
|
||||
super(null, buffetScreenOption, settingsSupplier);
|
||||
this.factory = factory;
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers and returns a new instance of {@link ChunkGeneratorType}.
|
||||
*
|
||||
* @param id registry ID of the ChunkGeneratorType
|
||||
* @param factory factory instance to provide a ChunkGenerator
|
||||
* @param settingsSupplier config supplier
|
||||
* @param buffetScreenOption whether or not the ChunkGeneratorType should appear in the buffet screen options page
|
||||
*/
|
||||
public static <C extends ChunkGeneratorConfig, T extends ChunkGenerator<C>> FabricChunkGeneratorType<C, T> register(Identifier id, FabricChunkGeneratorFactory<C, T> factory, Supplier<C> settingsSupplier, boolean buffetScreenOption) {
|
||||
return Registry.register(Registry.CHUNK_GENERATOR_TYPE, id, new FabricChunkGeneratorType<>(factory, buffetScreenOption, settingsSupplier));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and returns an instance of the ChunkGeneratorType's ChunkGenerator.
|
||||
*
|
||||
* @param world DimensionType's world instance
|
||||
* @param biomeSource BiomeSource to use while generating the world
|
||||
* @param config ChunkGenerator config instance
|
||||
*/
|
||||
@Override
|
||||
public T create(World world, BiomeSource biomeSource, C config) {
|
||||
return factory.create(world, biomeSource, config);
|
||||
}
|
||||
|
||||
/**
|
||||
* Responsible for creating the FabricChunkGeneratorType's ChunkGenerator instance.
|
||||
* Called when a new instance of a ChunkGenerator is requested in {@link FabricChunkGeneratorType#create(World, BiomeSource, ChunkGeneratorConfig)}.
|
||||
*
|
||||
* @param <C> ChunkGeneratorConfig
|
||||
* @param <T> ChunkGenerator
|
||||
*/
|
||||
@FunctionalInterface
|
||||
public interface FabricChunkGeneratorFactory<C extends ChunkGeneratorConfig, T extends ChunkGenerator<C>> {
|
||||
T create(World world, BiomeSource source, C config);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue