Co-authored-by: Technici4n <13494793+Technici4n@users.noreply.github.com>
This commit is contained in:
modmuss50 2022-10-26 20:48:38 +01:00 committed by GitHub
parent 75e98211bd
commit 11ba9c3b22
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
73 changed files with 578 additions and 500 deletions
fabric-biome-api-v1/src/testmod/java/net/fabricmc/fabric/test/biome
fabric-command-api-v2/src/client/java/net/fabricmc/fabric/mixin/command/client
fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/api/registry
fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen
fabric-data-generation-api-v1
fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/impl/gamerule/widget
fabric-item-group-api-v1/src
client/java/net/fabricmc/fabric/impl/itemgroup
main/java/net/fabricmc/fabric
fabric-models-v0/src/testmod/java/net/fabricmc/fabric/test/model
fabric-networking-api-v1/src/testmod/java/net/fabricmc/fabric/test/networking/channeltest
fabric-object-builder-api-v1/src
client/java/net/fabricmc/fabric
main
java/net/fabricmc/fabric/api/object/builder/v1/world/poi
resources
fabric-renderer-api-v1/src
client/java/net/fabricmc/fabric
testmod/java/net/fabricmc/fabric/test/renderer/simple/client
fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer
fabric-rendering-fluids-v1/src/testmod/java/net/fabricmc/fabric/test/client/rendering/fluid
fabric-rendering-v1/src
client/java/net/fabricmc/fabric
api/client/rendering/v1
impl/client/rendering
mixin/client/rendering
testmod/java/net/fabricmc/fabric/test/rendering/client
fabric-resource-loader-v0/src
client/java/net/fabricmc/fabric/mixin/resource/loader/client
main/java/net/fabricmc/fabric
fabric-screen-api-v1/src/testmod/java/net/fabricmc/fabric/test/screen
fabric-textures-v0/src/client/java/net/fabricmc/fabric
fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/client
fabric-transitive-access-wideners-v1
gradle.properties

View file

@ -22,6 +22,7 @@ import net.fabricmc.fabric.api.datagen.v1.provider.FabricBuiltinRegistriesProvid
public class DataGeneratorEntrypoint implements net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint {
@Override
public void onInitializeDataGenerator(FabricDataGenerator dataGenerator) {
dataGenerator.addProvider(FabricBuiltinRegistriesProvider.forCurrentMod());
FabricDataGenerator.Pack pack = dataGenerator.create();
pack.addProvider(FabricBuiltinRegistriesProvider.forCurrentMod());
}
}

View file

@ -49,16 +49,16 @@ abstract class ClientPlayNetworkHandlerMixin {
private ClientCommandSource commandSource;
@Shadow
private FeatureSet field_40482;
private FeatureSet enabledFeatures;
@Shadow
private CombinedDynamicRegistries<ClientDynamicRegistryType> registryManager;
private CombinedDynamicRegistries<ClientDynamicRegistryType> combinedDynamicRegistries;
@Inject(method = "onGameJoin", at = @At("RETURN"))
private void onGameJoin(GameJoinS2CPacket packet, CallbackInfo info) {
final CommandDispatcher<FabricClientCommandSource> dispatcher = new CommandDispatcher<>();
ClientCommandInternals.setActiveDispatcher(dispatcher);
ClientCommandRegistrationCallback.EVENT.invoker().register(dispatcher, new CommandRegistryAccess(this.registryManager.getCombinedRegistryManager(), this.field_40482));
ClientCommandRegistrationCallback.EVENT.invoker().register(dispatcher, new CommandRegistryAccess(this.combinedDynamicRegistries.getCombinedRegistryManager(), this.enabledFeatures));
ClientCommandInternals.finalizeInit();
}
@ -71,14 +71,14 @@ abstract class ClientPlayNetworkHandlerMixin {
ClientCommandInternals.addCommands((CommandDispatcher) commandDispatcher, (FabricClientCommandSource) commandSource);
}
@Inject(method = "method_45731", at = @At("HEAD"), cancellable = true)
@Inject(method = "sendCommand", at = @At("HEAD"), cancellable = true)
private void onSendCommand(String command, CallbackInfoReturnable<Boolean> cir) {
if (ClientCommandInternals.executeCommand(command)) {
cir.setReturnValue(true);
}
}
@Inject(method = "method_45730", at = @At("HEAD"), cancellable = true)
@Inject(method = "sendChatCommand", at = @At("HEAD"), cancellable = true)
private void onSendCommand(String command, CallbackInfo info) {
if (ClientCommandInternals.executeCommand(command)) {
info.cancel();

View file

@ -51,7 +51,7 @@ public final class SculkSensorFrequencyRegistry {
throw new IllegalArgumentException("Attempted to register Sculk Sensor frequency for event "+event.getId()+" with frequency "+frequency+". Sculk Sensor frequencies must be between 1 and 15 inclusive.");
}
int replaced = VibrationListener.field_40356.put(event, frequency);
int replaced = VibrationListener.FREQUENCIES.put(event, frequency);
if (replaced != 0) {
LOGGER.debug("Replaced old frequency mapping for {} - was {}, now {}", event.getId(), replaced, frequency);

View file

@ -16,23 +16,25 @@
package net.fabricmc.fabric.impl.tag.convention.datagen;
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.impl.tag.convention.datagen.generators.BiomeTagGenerator;
import net.fabricmc.fabric.impl.tag.convention.datagen.generators.BlockTagGenerator;
import net.fabricmc.fabric.impl.tag.convention.datagen.generators.EnchantmentTagGenerator;
import net.fabricmc.fabric.impl.tag.convention.datagen.generators.EntityTypeTagGenerator;
import net.fabricmc.fabric.impl.tag.convention.datagen.generators.FluidTagGenerator;
import net.fabricmc.fabric.impl.tag.convention.datagen.generators.ItemTagGenerator;
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
public class DatagenEntrypoint implements DataGeneratorEntrypoint {
@Override
public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {
fabricDataGenerator.addProvider(ItemTagGenerator::new);
fabricDataGenerator.addProvider(FluidTagGenerator::new);
fabricDataGenerator.addProvider(EnchantmentTagGenerator::new);
fabricDataGenerator.addProvider(BlockTagGenerator::new);
fabricDataGenerator.addProvider(BiomeTagGenerator::new);
fabricDataGenerator.addProvider(EntityTypeTagGenerator::new);
final FabricDataGenerator.Pack pack = fabricDataGenerator.create();
pack.addProvider(ItemTagGenerator::new);
pack.addProvider(FluidTagGenerator::new);
pack.addProvider(EnchantmentTagGenerator::new);
pack.addProvider(BlockTagGenerator::new);
pack.addProvider(BiomeTagGenerator::new);
pack.addProvider(EntityTypeTagGenerator::new);
}
}

View file

@ -21,13 +21,13 @@ import net.minecraft.util.registry.Registry;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.BiomeKeys;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
import net.fabricmc.fabric.api.tag.convention.v1.ConventionalBiomeTags;
public class BiomeTagGenerator extends FabricTagProvider.DynamicRegistryTagProvider<Biome> {
public BiomeTagGenerator(FabricDataGenerator dataGenerator) {
super(dataGenerator, Registry.BIOME_KEY);
public BiomeTagGenerator(FabricDataOutput output) {
super(output, Registry.BIOME_KEY);
}
@Override

View file

@ -19,13 +19,13 @@ package net.fabricmc.fabric.impl.tag.convention.datagen.generators;
import net.minecraft.block.Blocks;
import net.minecraft.tag.BlockTags;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
import net.fabricmc.fabric.api.tag.convention.v1.ConventionalBlockTags;
public class BlockTagGenerator extends FabricTagProvider.BlockTagProvider {
public BlockTagGenerator(FabricDataGenerator dataGenerator) {
super(dataGenerator);
public BlockTagGenerator(FabricDataOutput output) {
super(output);
}
@Override

View file

@ -20,13 +20,13 @@ import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.Enchantments;
import net.minecraft.util.registry.Registry;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
import net.fabricmc.fabric.api.tag.convention.v1.ConventionalEnchantmentTags;
public class EnchantmentTagGenerator extends FabricTagProvider<Enchantment> {
public EnchantmentTagGenerator(FabricDataGenerator dataGenerator) {
super(dataGenerator, Registry.ENCHANTMENT);
public EnchantmentTagGenerator(FabricDataOutput output) {
super(output, Registry.ENCHANTMENT);
}
@Override

View file

@ -18,13 +18,13 @@ package net.fabricmc.fabric.impl.tag.convention.datagen.generators;
import net.minecraft.entity.EntityType;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
import net.fabricmc.fabric.api.tag.convention.v1.ConventionalEntityTypeTags;
public class EntityTypeTagGenerator extends FabricTagProvider.EntityTypeTagProvider {
public EntityTypeTagGenerator(FabricDataGenerator dataGenerator) {
super(dataGenerator);
public EntityTypeTagGenerator(FabricDataOutput output) {
super(output);
}
@Override

View file

@ -18,13 +18,13 @@ package net.fabricmc.fabric.impl.tag.convention.datagen.generators;
import net.minecraft.tag.FluidTags;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
import net.fabricmc.fabric.api.tag.convention.v1.ConventionalFluidTags;
public class FluidTagGenerator extends FabricTagProvider.FluidTagProvider {
public FluidTagGenerator(FabricDataGenerator dataGenerator) {
super(dataGenerator);
public FluidTagGenerator(FabricDataOutput output) {
super(output);
}
@Override

View file

@ -21,7 +21,7 @@ import net.minecraft.tag.ItemTags;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
import net.fabricmc.fabric.api.tag.convention.v1.ConventionalItemTags;
@ -57,8 +57,8 @@ public class ItemTagGenerator extends FabricTagProvider.ItemTagProvider {
@Deprecated
private static final Identifier FABRIC_SWORDS = createFabricId("swords");
public ItemTagGenerator(FabricDataGenerator dataGenerator) {
super(dataGenerator);
public ItemTagGenerator(FabricDataOutput output) {
super(output);
}
@Override

View file

@ -18,7 +18,6 @@ package net.fabricmc.fabric.api.datagen.v1;
import java.nio.file.Path;
import java.util.Objects;
import java.util.function.Function;
import org.jetbrains.annotations.ApiStatus;
@ -27,7 +26,6 @@ import net.minecraft.data.DataGenerator;
import net.minecraft.data.DataOutput;
import net.minecraft.data.DataProvider;
import net.fabricmc.fabric.impl.datagen.FabricDataOutput;
import net.fabricmc.loader.api.ModContainer;
/**
@ -36,46 +34,23 @@ import net.fabricmc.loader.api.ModContainer;
public final class FabricDataGenerator extends DataGenerator {
private final ModContainer modContainer;
private final boolean strictValidation;
private final FabricDataOutput fabricOutput;
@ApiStatus.Internal
public FabricDataGenerator(Path output, ModContainer mod, boolean strictValidation) {
super(output, SharedConstants.getGameVersion(), true);
this.modContainer = Objects.requireNonNull(mod);
this.strictValidation = strictValidation;
this.output = new FabricDataOutput(this, output);
this.fabricOutput = new FabricDataOutput(mod, output, strictValidation);
}
@Override
public DataOutput getOutputFor(String packName) {
return new FabricDataOutput(this, super.getOutputFor(packName).getPath());
public Pack create() {
return new Pack(true, modContainer.getMetadata().getName(), this.fabricOutput);
}
/**
* Helper overloaded method to aid with registering a {@link DataProvider} that has a single argument constructor for a {@link FabricDataGenerator}.
*
* @return The {@link DataProvider}
*/
public <P extends DataProvider> P addProvider(Function<FabricDataGenerator, P> provider) {
return addProvider(true, provider);
}
/**
* Helper overloaded method to aid with registering a {@link DataProvider} that has a single argument constructor for a {@link FabricDataGenerator}.
*
* @return The {@link DataProvider}
*/
public <P extends DataProvider> P addProvider(boolean include, Function<FabricDataGenerator, P> provider) {
P p = provider.apply(this);
addProvider(include, p);
return p;
}
/**
* Helper overloaded method to aid with registering a {@link DataProvider}.
*/
public void addProvider(DataProvider dataProvider) {
super.addProvider(true, dataProvider);
public Pack createSubPack(String packName) {
Path path = this.output.resolvePath(DataOutput.OutputType.DATA_PACK).resolve(getModId()).resolve("datapacks").resolve(packName);
return new Pack(true, packName, new FabricDataOutput(modContainer, path, strictValidation));
}
/**
@ -104,4 +79,42 @@ public final class FabricDataGenerator extends DataGenerator {
public boolean isStrictValidationEnabled() {
return strictValidation;
}
/**
* @deprecated Please use {@link FabricDataGenerator#create()}
*/
@Override
@Deprecated
public DataGenerator.Pack createVanilla(boolean shouldRun) {
throw new UnsupportedOperationException();
}
/**
* @deprecated Please use {@link FabricDataGenerator#createSubPack(String)}
*/
@Override
@Deprecated
public DataGenerator.Pack createVanillaSubPack(boolean shouldRun, String packName) {
throw new UnsupportedOperationException();
}
public final class Pack extends DataGenerator.Pack {
private Pack(boolean shouldRun, String name, FabricDataOutput output) {
super(shouldRun, name, output);
}
/**
* Method to register a {@link Factory} to create a {@link DataProvider} that has a single argument constructor for a {@link FabricDataOutput}.
*
* @return The {@link DataProvider}
*/
public <T extends DataProvider> T addProvider(Factory<T> factory) {
return super.addProvider(output -> factory.create((FabricDataOutput) output));
}
@FunctionalInterface
public interface Factory<T extends DataProvider> {
T create(FabricDataOutput output);
}
}
}

View file

@ -0,0 +1,67 @@
/*
* 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.datagen.v1;
import java.nio.file.Path;
import org.jetbrains.annotations.ApiStatus;
import net.minecraft.data.DataOutput;
import net.fabricmc.loader.api.ModContainer;
/**
* Extends {@link DataOutput} to keep track of the {@link ModContainer} that it originated from.
*/
public final class FabricDataOutput extends DataOutput {
private final ModContainer modContainer;
private final boolean strictValidation;
@ApiStatus.Internal
public FabricDataOutput(ModContainer modContainer, Path path, boolean strictValidation) {
super(path);
this.modContainer = modContainer;
this.strictValidation = strictValidation;
}
/**
* Returns the {@link ModContainer} for the mod that this data generator has been created for.
*
* @return a {@link ModContainer} instance
*/
public ModContainer getModContainer() {
return modContainer;
}
/**
* Returns the mod ID for the mod that this data generator has been created for.
*
* @return a mod ID
*/
public String getModId() {
return getModContainer().getMetadata().getId();
}
/**
* When enabled data providers can do strict validation to ensure that all entries have data generated for them.
*
* @return if strict validation should be enabled
*/
public boolean isStrictValidationEnabled() {
return strictValidation;
}
}

View file

@ -16,9 +16,11 @@
package net.fabricmc.fabric.api.datagen.v1.provider;
import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;
import com.google.common.base.Preconditions;
@ -32,21 +34,22 @@ import net.minecraft.data.DataWriter;
import net.minecraft.util.Identifier;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.resource.conditions.v1.ConditionJsonProvider;
import net.fabricmc.fabric.impl.datagen.FabricDataGenHelper;
/**
* Extend this class and implement {@link FabricAdvancementProvider#generateAdvancement}.
*
* <p>Register an instance of the class with {@link FabricDataGenerator#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
* <p>Register an instance of the class with {@link FabricDataGenerator.Pack#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
*/
public abstract class FabricAdvancementProvider implements DataProvider {
protected final FabricDataGenerator dataGenerator;
protected final FabricDataOutput output;
private final DataOutput.PathResolver pathResolver;
protected FabricAdvancementProvider(FabricDataGenerator dataGenerator) {
this.dataGenerator = dataGenerator;
this.pathResolver = dataGenerator.getOutput().getResolver(DataOutput.OutputType.DATA_PACK, "advancements");
protected FabricAdvancementProvider(FabricDataOutput output) {
this.output = output;
this.pathResolver = output.getResolver(DataOutput.OutputType.DATA_PACK, "advancements");
}
/**
@ -68,12 +71,14 @@ public abstract class FabricAdvancementProvider implements DataProvider {
}
@Override
public void run(DataWriter writer) throws IOException {
public CompletableFuture<?> run(DataWriter writer) {
final Set<Identifier> identifiers = Sets.newHashSet();
final Set<Advancement> advancements = Sets.newHashSet();
generateAdvancement(advancements::add);
final List<CompletableFuture<?>> futures = new ArrayList<>();
for (Advancement advancement : advancements) {
if (!identifiers.add(advancement.getId())) {
throw new IllegalStateException("Duplicate advancement " + advancement.getId());
@ -82,8 +87,10 @@ public abstract class FabricAdvancementProvider implements DataProvider {
JsonObject advancementJson = advancement.createTask().toJson();
ConditionJsonProvider.write(advancementJson, FabricDataGenHelper.consumeConditions(advancement));
DataProvider.writeToPath(writer, advancementJson, getOutputPath(advancement));
futures.add(DataProvider.writeToPath(writer, advancementJson, getOutputPath(advancement)));
}
return CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new));
}
private Path getOutputPath(Advancement advancement) {

View file

@ -35,19 +35,20 @@ import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
/**
* Extend this class and implement {@link FabricBlockLootTableProvider#generate}.
*
* <p>Register an instance of the class with {@link FabricDataGenerator#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
* <p>Register an instance of the class with {@link FabricDataGenerator.Pack#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
*/
public abstract class FabricBlockLootTableProvider extends BlockLootTableGenerator implements FabricLootTableProvider {
protected final FabricDataGenerator dataGenerator;
private final FabricDataOutput output;
private final Set<Identifier> excludedFromStrictValidation = new HashSet<>();
protected FabricBlockLootTableProvider(FabricDataGenerator dataGenerator) {
protected FabricBlockLootTableProvider(FabricDataOutput dataOutput) {
super(Collections.emptySet(), FeatureFlags.FEATURE_MANAGER.getFeatureSet());
this.dataGenerator = dataGenerator;
this.output = dataOutput;
}
/**
@ -71,8 +72,8 @@ public abstract class FabricBlockLootTableProvider extends BlockLootTableGenerat
}
@Override
public FabricDataGenerator getFabricDataGenerator() {
return dataGenerator;
public FabricDataOutput getFabricDataOutput() {
return output;
}
@Override
@ -89,11 +90,11 @@ public abstract class FabricBlockLootTableProvider extends BlockLootTableGenerat
biConsumer.accept(identifier, entry.getValue());
}
if (dataGenerator.isStrictValidationEnabled()) {
if (output.isStrictValidationEnabled()) {
Set<Identifier> missing = Sets.newHashSet();
for (Identifier blockId : Registry.BLOCK.getIds()) {
if (blockId.getNamespace().equals(dataGenerator.getModId())) {
if (blockId.getNamespace().equals(output.getModId())) {
if (!lootTables.containsKey(Registry.BLOCK.get(blockId).getLootTableId())) {
missing.add(blockId);
}

View file

@ -16,11 +16,12 @@
package net.fabricmc.fabric.api.datagen.v1.provider;
import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.concurrent.CompletableFuture;
import java.util.function.Predicate;
import com.google.gson.JsonElement;
@ -42,6 +43,7 @@ import net.minecraft.util.registry.RegistryKey;
import net.minecraft.util.registry.RegistryLoader;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
/**
* Data-generates all entries from {@link BuiltinRegistries} that matches a given filter (i.e. mod id).
@ -52,9 +54,9 @@ public class FabricBuiltinRegistriesProvider implements DataProvider {
private static final Logger LOGGER = LoggerFactory.getLogger(FabricBuiltinRegistriesProvider.class);
private final Predicate<RegistryKey<?>> entryFilter;
private final DataOutput output;
private final FabricDataOutput output;
private FabricBuiltinRegistriesProvider(DataOutput output, Predicate<RegistryKey<?>> entryFilter) {
private FabricBuiltinRegistriesProvider(FabricDataOutput output, Predicate<RegistryKey<?>> entryFilter) {
this.output = output;
this.entryFilter = entryFilter;
}
@ -63,25 +65,34 @@ public class FabricBuiltinRegistriesProvider implements DataProvider {
* @return A provider that will export all entries from {@link BuiltinRegistries} for the mod running the
* data generation.
*/
public static Function<FabricDataGenerator, DataProvider> forCurrentMod() {
return fabricDataGenerator -> new FabricBuiltinRegistriesProvider(
fabricDataGenerator.getOutput(),
e -> e.getValue().getNamespace().equals(fabricDataGenerator.getModId())
public static FabricDataGenerator.Pack.Factory<FabricBuiltinRegistriesProvider> forCurrentMod() {
return output -> new FabricBuiltinRegistriesProvider(
output,
e -> e.getValue().getNamespace().equals(output.getModId())
);
}
@Override
public void run(DataWriter writer) {
public CompletableFuture<?> run(DataWriter writer) {
DynamicRegistryManager dynamicRegistryManager = BuiltinRegistries.createBuiltinRegistryManager();
DynamicOps<JsonElement> dynamicOps = RegistryOps.of(JsonOps.INSTANCE, dynamicRegistryManager);
RegistryLoader.DYNAMIC_REGISTRIES.forEach((info) -> this.writeRegistryEntries(writer, dynamicRegistryManager, dynamicOps, info));
final List<CompletableFuture<?>> futures = new ArrayList<>();
for (RegistryLoader.Entry<?> entry : RegistryLoader.DYNAMIC_REGISTRIES) {
futures.add(this.writeRegistryEntries(writer, dynamicRegistryManager, dynamicOps, entry));
}
return CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new));
}
private <T> void writeRegistryEntries(DataWriter writer, DynamicRegistryManager registryManager, DynamicOps<JsonElement> ops, RegistryLoader.Entry<T> registry) {
private <T> CompletableFuture<?> writeRegistryEntries(DataWriter writer, DynamicRegistryManager registryManager, DynamicOps<JsonElement> ops, RegistryLoader.Entry<T> registry) {
RegistryKey<? extends Registry<T>> registryKey = registry.key();
Registry<T> registry2 = registryManager.get(registryKey);
DataOutput.PathResolver pathResolver = this.output.getResolver(DataOutput.OutputType.DATA_PACK, registryKey.getValue().getPath());
final List<CompletableFuture<?>> futures = new ArrayList<>();
for (Map.Entry<RegistryKey<T>, T> regEntry : registry2.getEntrySet()) {
RegistryKey<T> key = regEntry.getKey();
@ -90,22 +101,22 @@ public class FabricBuiltinRegistriesProvider implements DataProvider {
}
Path path = pathResolver.resolveJson(key.getValue());
writeToPath(path, writer, ops, registry.elementCodec(), regEntry.getValue());
futures.add(writeToPath(path, writer, ops, registry.elementCodec(), regEntry.getValue()));
}
return CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new));
}
private static <E> void writeToPath(Path path, DataWriter cache, DynamicOps<JsonElement> json, Encoder<E> encoder, E value) {
try {
Optional<JsonElement> optional = encoder.encodeStart(json, value).resultOrPartial((error) -> {
LOGGER.error("Couldn't serialize element {}: {}", path, error);
});
private static <E> CompletableFuture<?> writeToPath(Path path, DataWriter cache, DynamicOps<JsonElement> json, Encoder<E> encoder, E value) {
Optional<JsonElement> optional = encoder.encodeStart(json, value).resultOrPartial((error) -> {
LOGGER.error("Couldn't serialize element {}: {}", path, error);
});
if (optional.isPresent()) {
DataProvider.writeToPath(cache, optional.get(), path);
}
} catch (IOException var6) {
LOGGER.error("Couldn't save element {}", path, var6);
if (optional.isPresent()) {
return DataProvider.writeToPath(cache, optional.get(), path);
}
return CompletableFuture.completedFuture(null);
}
@Override

View file

@ -23,6 +23,7 @@ import java.nio.file.Path;
import java.util.Map;
import java.util.Objects;
import java.util.TreeMap;
import java.util.concurrent.CompletableFuture;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
@ -42,23 +43,24 @@ import net.minecraft.stat.StatType;
import net.minecraft.util.Identifier;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
/**
* Extend this class and implement {@link FabricLanguageProvider#generateTranslations(TranslationBuilder)}.
* Make sure to use {@link FabricLanguageProvider#FabricLanguageProvider(FabricDataGenerator, String)} FabricLanguageProvider} to declare what language code is being generated if it isn't {@code en_us}.
* Make sure to use {@link FabricLanguageProvider#FabricLanguageProvider(FabricDataOutput, String)} FabricLanguageProvider} to declare what language code is being generated if it isn't {@code en_us}.
*
* <p>Register an instance of the class with {@link FabricDataGenerator#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
* <p>Register an instance of the class with {@link FabricDataGenerator.Pack#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
*/
public abstract class FabricLanguageProvider implements DataProvider {
protected final FabricDataGenerator dataGenerator;
protected final FabricDataOutput dataOutput;
private final String languageCode;
protected FabricLanguageProvider(FabricDataGenerator dataGenerator) {
this(dataGenerator, "en_us");
protected FabricLanguageProvider(FabricDataOutput dataOutput) {
this(dataOutput, "en_us");
}
protected FabricLanguageProvider(FabricDataGenerator dataGenerator, String languageCode) {
this.dataGenerator = dataGenerator;
protected FabricLanguageProvider(FabricDataOutput dataOutput, String languageCode) {
this.dataOutput = dataOutput;
this.languageCode = languageCode;
}
@ -70,7 +72,7 @@ public abstract class FabricLanguageProvider implements DataProvider {
public abstract void generateTranslations(TranslationBuilder translationBuilder);
@Override
public void run(DataWriter writer) throws IOException {
public CompletableFuture<?> run(DataWriter writer) {
TreeMap<String, String> translationEntries = new TreeMap<>();
generateTranslations((String key, String value) -> {
@ -90,18 +92,18 @@ public abstract class FabricLanguageProvider implements DataProvider {
langEntryJson.addProperty(entry.getKey(), entry.getValue());
}
DataProvider.writeToPath(writer, langEntryJson, getLangFilePath(this.languageCode));
return DataProvider.writeToPath(writer, langEntryJson, getLangFilePath(this.languageCode));
}
private Path getLangFilePath(String code) {
return dataGenerator.getOutput()
return dataOutput
.getResolver(DataOutput.OutputType.RESOURCE_PACK, "lang")
.resolveJson(new Identifier(dataGenerator.getModId(), code));
.resolveJson(new Identifier(dataOutput.getModId(), code));
}
@Override
public String getName() {
return "Language";
public final String getName() {
return "Language (%s)".formatted(languageCode);
}
/**

View file

@ -16,10 +16,12 @@
package net.fabricmc.fabric.api.datagen.v1.provider;
import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
@ -36,7 +38,7 @@ import net.minecraft.loot.LootTable;
import net.minecraft.loot.context.LootContextType;
import net.minecraft.util.Identifier;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.resource.conditions.v1.ConditionJsonProvider;
import net.fabricmc.fabric.impl.datagen.FabricDataGenHelper;
@ -51,7 +53,7 @@ import net.fabricmc.fabric.impl.datagen.FabricDataGenHelper;
public interface FabricLootTableProvider extends Consumer<BiConsumer<Identifier, LootTable.Builder>>, DataProvider {
LootContextType getLootContextType();
FabricDataGenerator getFabricDataGenerator();
FabricDataOutput getFabricDataOutput();
/**
* Return a new exporter that applies the specified conditions to any loot table it receives.
@ -66,7 +68,7 @@ public interface FabricLootTableProvider extends Consumer<BiConsumer<Identifier,
@ApiStatus.Internal
@Override
default void run(DataWriter writer) throws IOException {
default CompletableFuture<?> run(DataWriter writer) {
HashMap<Identifier, LootTable> builders = Maps.newHashMap();
HashMap<Identifier, ConditionJsonProvider[]> conditionMap = new HashMap<>();
@ -79,15 +81,19 @@ public interface FabricLootTableProvider extends Consumer<BiConsumer<Identifier,
}
});
final List<CompletableFuture<?>> futures = new ArrayList<>();
for (Map.Entry<Identifier, LootTable> entry : builders.entrySet()) {
JsonObject tableJson = (JsonObject) LootManager.toJson(entry.getValue());
ConditionJsonProvider.write(tableJson, conditionMap.remove(entry.getKey()));
DataProvider.writeToPath(writer, tableJson, getOutputPath(entry.getKey()));
futures.add(DataProvider.writeToPath(writer, tableJson, getOutputPath(entry.getKey())));
}
return CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new));
}
private Path getOutputPath(Identifier lootTableId) {
return getFabricDataGenerator().getOutput().getResolver(DataOutput.OutputType.DATA_PACK, "loot_tables").resolveJson(lootTableId);
return getFabricDataOutput().getResolver(DataOutput.OutputType.DATA_PACK, "loot_tables").resolveJson(lootTableId);
}
}

View file

@ -21,25 +21,19 @@ import net.minecraft.data.client.ItemModelGenerator;
import net.minecraft.data.client.ModelProvider;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
/**
* Extend this class and implement {@link FabricModelProvider#generateBlockStateModels} and {@link FabricModelProvider#generateItemModels}.
*
* <p>Register an instance of the class with {@link FabricDataGenerator#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
* <p>Register an instance of the class with {@link FabricDataGenerator.Pack#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
*/
public abstract class FabricModelProvider extends ModelProvider {
protected final FabricDataGenerator dataGenerator;
public FabricModelProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator.getOutput());
this.dataGenerator = dataGenerator;
public FabricModelProvider(FabricDataOutput output) {
super(output);
}
public abstract void generateBlockStateModels(BlockStateModelGenerator blockStateModelGenerator);
public abstract void generateItemModels(ItemModelGenerator itemModelGenerator);
public String getName() {
return "Models";
}
}

View file

@ -16,13 +16,17 @@
package net.fabricmc.fabric.api.datagen.v1.provider;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;
import com.google.common.base.Preconditions;
import com.google.common.collect.Sets;
import com.google.gson.JsonObject;
import net.minecraft.data.DataProvider;
import net.minecraft.data.DataWriter;
import net.minecraft.data.server.recipe.RecipeJsonProvider;
import net.minecraft.data.server.recipe.RecipeProvider;
@ -31,20 +35,21 @@ import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder;
import net.minecraft.util.Identifier;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.resource.conditions.v1.ConditionJsonProvider;
import net.fabricmc.fabric.impl.datagen.FabricDataGenHelper;
/**
* Extend this class and implement {@link FabricRecipeProvider#generate}.
*
* <p>Register an instance of the class with {@link FabricDataGenerator#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
* <p>Register an instance of the class with {@link FabricDataGenerator.Pack#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
*/
public abstract class FabricRecipeProvider extends RecipeProvider {
protected final FabricDataGenerator dataGenerator;
protected final FabricDataOutput output;
public FabricRecipeProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator.getOutput());
this.dataGenerator = dataGenerator;
public FabricRecipeProvider(FabricDataOutput output) {
super(output);
this.output = output;
}
/**
@ -65,8 +70,9 @@ public abstract class FabricRecipeProvider extends RecipeProvider {
}
@Override
public void run(DataWriter writer) {
public CompletableFuture<?> run(DataWriter writer) {
Set<Identifier> generatedRecipes = Sets.newHashSet();
List<CompletableFuture<?>> list = new ArrayList<>();
generate(provider -> {
Identifier identifier = getRecipeIdentifier(provider.getRecipeId());
@ -78,25 +84,21 @@ public abstract class FabricRecipeProvider extends RecipeProvider {
ConditionJsonProvider[] conditions = FabricDataGenHelper.consumeConditions(provider);
ConditionJsonProvider.write(recipeJson, conditions);
saveRecipe(writer, recipeJson, this.recipesPathResolver.resolveJson(identifier));
list.add(DataProvider.writeToPath(writer, recipeJson, this.recipesPathResolver.resolveJson(identifier)));
JsonObject advancementJson = provider.toAdvancementJson();
if (advancementJson != null) {
ConditionJsonProvider.write(advancementJson, conditions);
saveRecipeAdvancement(writer, advancementJson, this.advancementsPathResolver.resolveJson(getRecipeIdentifier(provider.getAdvancementId())));
list.add(DataProvider.writeToPath(writer, advancementJson, this.advancementsPathResolver.resolveJson(getRecipeIdentifier(provider.getAdvancementId()))));
}
});
}
@Override
public String getName() {
return "Recipes";
return CompletableFuture.allOf(list.toArray(CompletableFuture[]::new));
}
/**
* Override this method to change the recipe identifier. The default implementation normalizes the namespace to the mod ID.
*/
protected Identifier getRecipeIdentifier(Identifier identifier) {
return new Identifier(dataGenerator.getModId(), identifier.getPath());
return new Identifier(output.getModId(), identifier.getPath());
}
}

View file

@ -42,13 +42,14 @@ import net.minecraft.util.registry.RegistryLoader;
import net.minecraft.world.event.GameEvent;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.impl.datagen.FabricDataGenHelper;
import net.fabricmc.fabric.impl.datagen.ForcedTagEntry;
/**
* Implement this class (or one of the inner classes) to generate a tag list.
*
* <p>Register your implementation using {@link FabricDataGenerator#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
* <p>Register your implementation using {@link FabricDataGenerator.Pack#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
*
* <p>Commonly used implementations of this class are provided:
*
@ -60,19 +61,16 @@ import net.fabricmc.fabric.impl.datagen.ForcedTagEntry;
* @see DynamicRegistryTagProvider
*/
public abstract class FabricTagProvider<T> extends AbstractTagProvider<T> {
private final FabricDataGenerator fabricDataGenerator;
/**
* Construct a new {@link FabricTagProvider} with the default computed path.
*
* <p>Common implementations of this class are provided. For example @see BlockTagProvider
*
* @param dataGenerator The data generator instance
* @param output The {@link FabricDataOutput} instance
* @param registry The backing registry for the Tag type.
*/
public FabricTagProvider(FabricDataGenerator dataGenerator, Registry<T> registry) {
super(dataGenerator.getOutput(), registry);
this.fabricDataGenerator = dataGenerator;
public FabricTagProvider(FabricDataOutput output, Registry<T> registry) {
super(output, registry);
if (!(this instanceof DynamicRegistryTagProvider) && BuiltinRegistries.REGISTRIES.contains((RegistryKey) registry.getKey())) {
throw new IllegalArgumentException("Using FabricTagProvider to generate dynamic registry tags is not supported, Use DynamicRegistryTagProvider instead.");
@ -104,8 +102,8 @@ public abstract class FabricTagProvider<T> extends AbstractTagProvider<T> {
* Extend this class to create {@link Block} tags in the "/blocks" tag directory.
*/
public abstract static class BlockTagProvider extends FabricTagProvider<Block> {
public BlockTagProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator, Registry.BLOCK);
public BlockTagProvider(FabricDataOutput output) {
super(output, Registry.BLOCK);
}
}
@ -119,10 +117,10 @@ public abstract class FabricTagProvider<T> extends AbstractTagProvider<T> {
/**
* Construct an {@link ItemTagProvider} tag provider <b>with</b> an associated {@link BlockTagProvider} tag provider.
*
* @param dataGenerator a {@link ItemTagProvider} tag provider
* @param output The {@link FabricDataOutput} instance
*/
public ItemTagProvider(FabricDataGenerator dataGenerator, @Nullable FabricTagProvider.BlockTagProvider blockTagProvider) {
super(dataGenerator, Registry.ITEM);
public ItemTagProvider(FabricDataOutput output, @Nullable FabricTagProvider.BlockTagProvider blockTagProvider) {
super(output, Registry.ITEM);
this.blockTagBuilderProvider = blockTagProvider == null ? null : blockTagProvider::getTagBuilder;
}
@ -130,10 +128,10 @@ public abstract class FabricTagProvider<T> extends AbstractTagProvider<T> {
/**
* Construct an {@link ItemTagProvider} tag provider <b>without</b> an associated {@link BlockTagProvider} tag provider.
*
* @param dataGenerator a {@link ItemTagProvider} tag provider
* @param output The {@link FabricDataOutput} instance
*/
public ItemTagProvider(FabricDataGenerator dataGenerator) {
this(dataGenerator, null);
public ItemTagProvider(FabricDataOutput output) {
this(output, null);
}
/**
@ -157,8 +155,8 @@ public abstract class FabricTagProvider<T> extends AbstractTagProvider<T> {
* Extend this class to create {@link Fluid} tags in the "/fluids" tag directory.
*/
public abstract static class FluidTagProvider extends FabricTagProvider<Fluid> {
public FluidTagProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator, Registry.FLUID);
public FluidTagProvider(FabricDataOutput output) {
super(output, Registry.FLUID);
}
}
@ -166,8 +164,8 @@ public abstract class FabricTagProvider<T> extends AbstractTagProvider<T> {
* Extend this class to create {@link EntityType} tags in the "/entity_types" tag directory.
*/
public abstract static class EntityTypeTagProvider extends FabricTagProvider<EntityType<?>> {
public EntityTypeTagProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator, Registry.ENTITY_TYPE);
public EntityTypeTagProvider(FabricDataOutput output) {
super(output, Registry.ENTITY_TYPE);
}
}
@ -175,8 +173,8 @@ public abstract class FabricTagProvider<T> extends AbstractTagProvider<T> {
* Extend this class to create {@link GameEvent} tags in the "/game_events" tag directory.
*/
public abstract static class GameEventTagProvider extends FabricTagProvider<GameEvent> {
public GameEventTagProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator, Registry.GAME_EVENT);
public GameEventTagProvider(FabricDataOutput output) {
super(output, Registry.GAME_EVENT);
}
}
@ -187,12 +185,12 @@ public abstract class FabricTagProvider<T> extends AbstractTagProvider<T> {
/**
* Construct a new {@link DynamicRegistryTagProvider}.
*
* @param dataGenerator The data generator instance
* @param output The {@link FabricDataOutput} instance
* @param registryKey The registry key of the dynamic registry
* @throws IllegalArgumentException if the registry is static registry
*/
protected DynamicRegistryTagProvider(FabricDataGenerator dataGenerator, RegistryKey<? extends Registry<T>> registryKey) {
super(dataGenerator, FabricDataGenHelper.getFakeDynamicRegistry(registryKey));
protected DynamicRegistryTagProvider(FabricDataOutput output, RegistryKey<? extends Registry<T>> registryKey) {
super(output, FabricDataGenHelper.getFakeDynamicRegistry(registryKey));
if (RegistryLoader.DYNAMIC_REGISTRIES.stream().noneMatch(o -> o.key() == registryKey)
&& RegistryLoader.DIMENSION_REGISTRIES.stream().noneMatch(o -> o.key() == registryKey)) {
throw new IllegalArgumentException("Only dynamic registries are supported in this tag provider.");
@ -381,8 +379,4 @@ public abstract class FabricTagProvider<T> extends AbstractTagProvider<T> {
}
}
}
public FabricDataGenerator getFabricDataGenerator() {
return fabricDataGenerator;
}
}

View file

@ -24,16 +24,17 @@ import net.minecraft.loot.context.LootContextType;
import net.minecraft.loot.context.LootContextTypes;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
/**
* Extend this class and implement {@link java.util.function.Consumer#accept}. Register an instance of the class with {@link FabricDataGenerator#addProvider} in a {@link net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint}
*/
public abstract class SimpleFabricLootTableProvider implements FabricLootTableProvider {
protected final FabricDataGenerator dataGenerator;
protected final FabricDataOutput output;
protected final LootContextType lootContextType;
public SimpleFabricLootTableProvider(FabricDataGenerator dataGenerator, LootContextType lootContextType) {
this.dataGenerator = dataGenerator;
public SimpleFabricLootTableProvider(FabricDataOutput output, LootContextType lootContextType) {
this.output = output;
this.lootContextType = lootContextType;
}
@ -45,8 +46,8 @@ public abstract class SimpleFabricLootTableProvider implements FabricLootTablePr
@ApiStatus.Internal
@Override
public final FabricDataGenerator getFabricDataGenerator() {
return dataGenerator;
public final FabricDataOutput getFabricDataOutput() {
return output;
}
@Override

View file

@ -1,42 +0,0 @@
/*
* 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.impl.datagen;
import java.nio.file.Path;
import org.jetbrains.annotations.ApiStatus;
import net.minecraft.data.DataOutput;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
/**
* Extends {@link DataOutput} to keep track of the {@link FabricDataGenerator} that it originated from.
*/
@ApiStatus.Internal
public class FabricDataOutput extends DataOutput {
private final FabricDataGenerator generator;
public FabricDataOutput(FabricDataGenerator generator, Path path) {
super(path);
this.generator = generator;
}
public FabricDataGenerator getGenerator() {
return generator;
}
}

View file

@ -17,12 +17,14 @@
package net.fabricmc.fabric.mixin.datagen;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import com.google.gson.JsonElement;
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;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import net.minecraft.data.DataWriter;
@ -35,7 +37,7 @@ import net.fabricmc.fabric.impl.datagen.FabricTagBuilder;
@Mixin(AbstractTagProvider.class)
public class AbstractTagProviderMixin {
@Inject(method = "method_27046", at = @At(value = "INVOKE", target = "Lnet/minecraft/data/DataOutput$PathResolver;resolveJson(Lnet/minecraft/util/Identifier;)Ljava/nio/file/Path;"), locals = LocalCapture.CAPTURE_FAILHARD)
public void addReplaced(DataWriter dataWriter, Identifier id, TagBuilder builder, CallbackInfo ci, List list, List list2, JsonElement jsonElement) {
public void addReplaced(DataWriter dataWriter, Map.Entry<?, ?> entry, CallbackInfoReturnable<CompletableFuture<?>> ci, Identifier id, TagBuilder builder, List list, List list2, JsonElement jsonElement) {
if (builder instanceof FabricTagBuilder fabricTagBuilder) {
jsonElement.getAsJsonObject().addProperty("replace", fabricTagBuilder.fabric_isReplaced());
}

View file

@ -18,6 +18,7 @@ package net.fabricmc.fabric.mixin.datagen;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.function.Supplier;
import com.google.gson.JsonElement;
@ -41,22 +42,21 @@ import net.minecraft.item.Item;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider;
import net.fabricmc.fabric.impl.datagen.FabricDataOutput;
@Mixin(ModelProvider.class)
public class ModelProviderMixin {
@Unique
private FabricDataGenerator generator;
private FabricDataOutput fabricDataOutput;
@Unique
private static final ThreadLocal<FabricDataGenerator> dataGeneratorThreadLocal = new ThreadLocal<>();
private static final ThreadLocal<FabricDataOutput> fabricDataOutputThreadLocal = new ThreadLocal<>();
@Inject(method = "<init>", at = @At("RETURN"))
public void init(DataOutput generator, CallbackInfo ci) {
if (generator instanceof FabricDataOutput fabricDataOutput) {
this.generator = fabricDataOutput.getGenerator();
public void init(DataOutput output, CallbackInfo ci) {
if (output instanceof FabricDataOutput fabricDataOutput) {
this.fabricDataOutput = fabricDataOutput;
}
}
@ -84,28 +84,28 @@ public class ModelProviderMixin {
}
@Inject(method = "run", at = @At(value = "INVOKE_ASSIGN", target = "com/google/common/collect/Maps.newHashMap()Ljava/util/HashMap;", ordinal = 0), locals = LocalCapture.CAPTURE_FAILHARD)
private void runHead(DataWriter writer, CallbackInfo ci, Map<Block, BlockStateSupplier> map) {
dataGeneratorThreadLocal.set(generator);
private void runHead(DataWriter writer, CallbackInfoReturnable<CompletableFuture<?>> cir, Map<Block, BlockStateSupplier> map) {
fabricDataOutputThreadLocal.set(fabricDataOutput);
blockStateMapThreadLocal.set(map);
}
@Inject(method = "run", at = @At("TAIL"))
private void runTail(DataWriter writer, CallbackInfo ci) {
dataGeneratorThreadLocal.remove();
private void runTail(DataWriter writer, CallbackInfoReturnable<CompletableFuture<?>> cir) {
fabricDataOutputThreadLocal.remove();
blockStateMapThreadLocal.remove();
}
@Inject(method = "method_25738", at = @At("HEAD"), cancellable = true)
private static void filterBlocksForProcessingMod(Map<Block, BlockStateSupplier> map, Block block, CallbackInfoReturnable<Boolean> cir) {
FabricDataGenerator dataGenerator = dataGeneratorThreadLocal.get();
FabricDataOutput dataOutput = fabricDataOutputThreadLocal.get();
if (dataGenerator != null) {
if (!dataGenerator.isStrictValidationEnabled()) {
if (dataOutput != null) {
if (!dataOutput.isStrictValidationEnabled()) {
cir.setReturnValue(false);
return;
}
if (!Registry.BLOCK.getId(block).getNamespace().equals(dataGenerator.getModId())) {
if (!Registry.BLOCK.getId(block).getNamespace().equals(dataOutput.getModId())) {
// Skip over blocks that are not from the mod we are processing.
cir.setReturnValue(false);
}
@ -114,16 +114,16 @@ public class ModelProviderMixin {
@Inject(method = "method_25741", at = @At(value = "INVOKE", target = "Lnet/minecraft/data/client/ModelIds;getItemModelId(Lnet/minecraft/item/Item;)Lnet/minecraft/util/Identifier;"), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
private static void filterItemsForProcessingMod(Set<Item> set, Map<Identifier, Supplier<JsonElement>> map, Block block, CallbackInfo ci, Item item) {
FabricDataGenerator dataGenerator = dataGeneratorThreadLocal.get();
FabricDataOutput dataOutput = fabricDataOutputThreadLocal.get();
if (dataGenerator != null) {
if (dataOutput != null) {
// Only generate the item model if the block state json was registered
if (!blockStateMapThreadLocal.get().containsKey(block)) {
ci.cancel();
return;
}
if (!Registry.ITEM.getId(item).getNamespace().equals(dataGenerator.getModId())) {
if (!Registry.ITEM.getId(item).getNamespace().equals(dataOutput.getModId())) {
// Skip over any items from other mods.
ci.cancel();
}

View file

@ -2,7 +2,6 @@ accessWidener v2 named
accessible field net/minecraft/data/DataGenerator output Lnet/minecraft/data/DataOutput;
mutable field net/minecraft/data/DataGenerator output Lnet/minecraft/data/DataOutput;
accessible field net/minecraft/data/DataGenerator outputPath Ljava/nio/file/Path;
accessible field net/minecraft/data/server/recipe/RecipeProvider recipesPathResolver Lnet/minecraft/data/DataOutput$PathResolver;
accessible field net/minecraft/data/server/recipe/RecipeProvider advancementsPathResolver Lnet/minecraft/data/DataOutput$PathResolver;
@ -25,6 +24,8 @@ extendable method net/minecraft/data/DataOutput$PathResolver <init> (Lnet/mi
accessible field net/minecraft/data/DataOutput$PathResolver rootPath Ljava/nio/file/Path;
accessible field net/minecraft/data/DataOutput$PathResolver directoryName Ljava/lang/String;
extendable method net/minecraft/data/DataGenerator$Pack <init> (Lnet/minecraft/data/DataGenerator;ZLjava/lang/String;Lnet/minecraft/data/DataOutput;)V
transitive-accessible method net/minecraft/data/family/BlockFamilies register (Lnet/minecraft/block/Block;)Lnet/minecraft/data/family/BlockFamily$Builder;
transitive-accessible field net/minecraft/data/client/BlockStateModelGenerator blockStateCollector Ljava/util/function/Consumer;
@ -42,9 +43,7 @@ transitive-accessible class net/minecraft/data/client/BlockStateModelGenerator
transitive-accessible class net/minecraft/data/client/BlockStateModelGenerator$LogTexturePool
transitive-accessible class net/minecraft/data/client/BlockStateModelGenerator$BuiltinModelPool
transitive-accessible method net/minecraft/data/server/recipe/RecipeProvider saveRecipeAdvancement (Lnet/minecraft/data/DataWriter;Lnet/minecraft/util/Identifier;Lnet/minecraft/advancement/Advancement$Builder;)V
transitive-accessible method net/minecraft/data/server/recipe/RecipeProvider saveRecipe (Lnet/minecraft/data/DataWriter;Lcom/google/gson/JsonObject;Ljava/nio/file/Path;)V
transitive-accessible method net/minecraft/data/server/recipe/RecipeProvider saveRecipeAdvancement (Lnet/minecraft/data/DataWriter;Lcom/google/gson/JsonObject;Ljava/nio/file/Path;)V
transitive-accessible method net/minecraft/data/server/recipe/RecipeProvider saveRecipeAdvancement (Lnet/minecraft/data/DataWriter;Lnet/minecraft/util/Identifier;Lnet/minecraft/advancement/Advancement$Builder;)Ljava/util/concurrent/CompletableFuture;
transitive-accessible method net/minecraft/data/server/recipe/RecipeProvider generate (Ljava/util/function/Consumer;)V
transitive-accessible method net/minecraft/data/server/recipe/RecipeProvider generateFamilies (Ljava/util/function/Consumer;Lnet/minecraft/resource/featuretoggle/FeatureSet;)V
transitive-accessible method net/minecraft/data/server/recipe/RecipeProvider offerSingleOutputShapelessRecipe (Ljava/util/function/Consumer;Lnet/minecraft/item/ItemConvertible;Lnet/minecraft/item/ItemConvertible;Ljava/lang/String;)V

View file

@ -16,7 +16,7 @@
"FabricMC"
],
"depends": {
"fabricloader": ">=0.12.0"
"fabricloader": ">=0.14.10"
},
"description": "Allows for automatic data generation.",
"mixins": [

View file

@ -34,6 +34,7 @@ import org.slf4j.LoggerFactory;
import net.minecraft.advancement.Advancement;
import net.minecraft.advancement.AdvancementFrame;
import net.minecraft.advancement.criterion.OnKilledCriterion;
import net.minecraft.data.DataProvider;
import net.minecraft.data.client.BlockStateModelGenerator;
import net.minecraft.data.client.ItemModelGenerator;
import net.minecraft.data.server.recipe.RecipeJsonProvider;
@ -60,6 +61,7 @@ import net.minecraft.world.biome.BiomeKeys;
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricAdvancementProvider;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricLanguageProvider;
@ -77,56 +79,64 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
@Override
public void onInitializeDataGenerator(FabricDataGenerator dataGenerator) {
dataGenerator.addProvider(TestRecipeProvider::new);
dataGenerator.addProvider(TestConditionalRecipeProvider::new);
dataGenerator.addProvider(TestModelProvider::new);
dataGenerator.addProvider(TestAdvancementProvider::new);
dataGenerator.addProvider(TestBlockLootTableProvider::new);
dataGenerator.addProvider(TestBarterLootTableProvider::new);
dataGenerator.addProvider(ExistingEnglishLangProvider::new);
dataGenerator.addProvider(JapaneseLangProvider::new);
final FabricDataGenerator.Pack pack = dataGenerator.create();
TestBlockTagProvider blockTagProvider = dataGenerator.addProvider(TestBlockTagProvider::new);
dataGenerator.addProvider(new TestItemTagProvider(dataGenerator, blockTagProvider));
dataGenerator.addProvider(TestBiomeTagProvider::new);
pack.addProvider(TestRecipeProvider::new);
pack.addProvider(TestModelProvider::new);
pack.addProvider(TestAdvancementProvider::new);
pack.addProvider(TestBlockLootTableProvider::new);
pack.addProvider(TestBarterLootTableProvider::new);
pack.addProvider(ExistingEnglishLangProvider::new);
pack.addProvider(JapaneseLangProvider::new);
TestBlockTagProvider blockTagProvider = pack.addProvider(TestBlockTagProvider::new);
pack.addProvider((FabricDataGenerator.Pack.Factory<TestItemTagProvider>) output -> new TestItemTagProvider(output, blockTagProvider));
pack.addProvider(TestBiomeTagProvider::new);
try {
new FabricTagProvider<>(dataGenerator, BuiltinRegistries.BIOME) {
@Override
protected void generateTags() {
}
};
throw new AssertionError("Using FabricTagProvider with built-in registry didn't throw an exception!");
pack.addProvider((FabricDataGenerator.Pack.Factory<DataProvider>) output -> {
new FabricTagProvider<>(output, BuiltinRegistries.BIOME) {
@Override
protected void generateTags() {
}
};
throw new AssertionError("Using FabricTagProvider with built-in registry didn't throw an exception!");
});
} catch (IllegalArgumentException e) {
// no-op
}
try {
new FabricTagProvider.DynamicRegistryTagProvider<>(dataGenerator, Registry.ITEM_KEY) {
@Override
protected void generateTags() {
}
};
throw new AssertionError("Using DynamicRegistryTagProvider with static registry didn't throw an exception!");
pack.addProvider((FabricDataGenerator.Pack.Factory<DataProvider>) output -> {
new FabricTagProvider.DynamicRegistryTagProvider<>(output, Registry.ITEM_KEY) {
@Override
protected void generateTags() {
}
};
throw new AssertionError("Using DynamicRegistryTagProvider with static registry didn't throw an exception!");
});
} catch (IllegalArgumentException e) {
// no-op
}
}
private static class TestRecipeProvider extends FabricRecipeProvider {
private TestRecipeProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator);
private TestRecipeProvider(FabricDataOutput output) {
super(output);
}
@Override
public void generate(Consumer<RecipeJsonProvider> exporter) {
offerPlanksRecipe2(exporter, SIMPLE_BLOCK, ItemTags.ACACIA_LOGS);
ShapelessRecipeJsonBuilder.create(RecipeCategory.MISC, Items.GOLD_INGOT).input(Items.DIRT).criterion("has_dirt", conditionsFromItem(Items.DIRT)).offerTo(withConditions(exporter, NEVER_LOADED));
ShapelessRecipeJsonBuilder.create(RecipeCategory.MISC, Items.DIAMOND).input(Items.STICK).criterion("has_stick", conditionsFromItem(Items.STICK)).offerTo(withConditions(exporter, ALWAYS_LOADED));
}
}
private static class ExistingEnglishLangProvider extends FabricLanguageProvider {
private ExistingEnglishLangProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator);
private ExistingEnglishLangProvider(FabricDataOutput output) {
super(output);
}
@Override
@ -137,7 +147,7 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
translationBuilder.add(EntityAttributes.GENERIC_ARMOR, "Generic Armor");
try {
Optional<Path> path = dataGenerator.getModContainer().findPath("assets/testmod/lang/en_us.base.json");
Optional<Path> path = dataOutput.getModContainer().findPath("assets/testmod/lang/en_us.base.json");
if (path.isPresent()) {
translationBuilder.add(path.get());
@ -157,8 +167,8 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
private static class JapaneseLangProvider extends FabricLanguageProvider {
private JapaneseLangProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator, "ja_jp");
private JapaneseLangProvider(FabricDataOutput output) {
super(output, "ja_jp");
}
@Override
@ -169,21 +179,9 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
}
private static class TestConditionalRecipeProvider extends FabricRecipeProvider {
private TestConditionalRecipeProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator);
}
@Override
public void generate(Consumer<RecipeJsonProvider> exporter) {
ShapelessRecipeJsonBuilder.create(RecipeCategory.MISC, Items.GOLD_INGOT).input(Items.DIRT).criterion("has_dirt", conditionsFromItem(Items.DIRT)).offerTo(withConditions(exporter, NEVER_LOADED));
ShapelessRecipeJsonBuilder.create(RecipeCategory.MISC, Items.DIAMOND).input(Items.STICK).criterion("has_stick", conditionsFromItem(Items.STICK)).offerTo(withConditions(exporter, ALWAYS_LOADED));
}
}
private static class TestModelProvider extends FabricModelProvider {
private TestModelProvider(FabricDataGenerator generator) {
super(generator);
private TestModelProvider(FabricDataOutput output) {
super(output);
}
@Override
@ -200,8 +198,8 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
private static class TestBlockTagProvider extends FabricTagProvider.BlockTagProvider {
private TestBlockTagProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator);
private TestBlockTagProvider(FabricDataOutput output) {
super(output);
}
@Override
@ -213,8 +211,8 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
private static class TestItemTagProvider extends FabricTagProvider.ItemTagProvider {
private TestItemTagProvider(FabricDataGenerator dataGenerator, BlockTagProvider blockTagProvider) {
super(dataGenerator, blockTagProvider);
private TestItemTagProvider(FabricDataOutput output, BlockTagProvider blockTagProvider) {
super(output, blockTagProvider);
}
@Override
@ -224,8 +222,8 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
private static class TestBiomeTagProvider extends FabricTagProvider.DynamicRegistryTagProvider<Biome> {
private TestBiomeTagProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator, Registry.BIOME_KEY);
private TestBiomeTagProvider(FabricDataOutput output) {
super(output, Registry.BIOME_KEY);
}
@Override
@ -244,8 +242,8 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
private static class TestAdvancementProvider extends FabricAdvancementProvider {
private TestAdvancementProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator);
private TestAdvancementProvider(FabricDataOutput output) {
super(output);
}
@Override
@ -274,8 +272,8 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
private static class TestBlockLootTableProvider extends FabricBlockLootTableProvider {
private TestBlockLootTableProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator);
private TestBlockLootTableProvider(FabricDataOutput output) {
super(output);
}
@Override
@ -288,8 +286,8 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
}
private static class TestBarterLootTableProvider extends SimpleFabricLootTableProvider {
private TestBarterLootTableProvider(FabricDataGenerator dataGenerator) {
super(dataGenerator, LootContextTypes.BARTER);
private TestBarterLootTableProvider(FabricDataOutput output) {
super(output, LootContextTypes.BARTER);
}
@Override

View file

@ -24,6 +24,8 @@ extendable method net/minecraft/data/DataOutput$PathResolver <init> (Lnet/mi
accessible field net/minecraft/data/DataOutput$PathResolver rootPath Ljava/nio/file/Path;
accessible field net/minecraft/data/DataOutput$PathResolver directoryName Ljava/lang/String;
extendable method net/minecraft/data/DataGenerator$Pack <init> (Lnet/minecraft/data/DataGenerator;ZLjava/lang/String;Lnet/minecraft/data/DataOutput;)V
transitive-accessible method net/minecraft/data/family/BlockFamilies register (Lnet/minecraft/block/Block;)Lnet/minecraft/data/family/BlockFamily$Builder;
transitive-accessible field net/minecraft/data/client/BlockStateModelGenerator blockStateCollector Ljava/util/function/Consumer;

View file

@ -64,8 +64,7 @@ public final class DoubleRuleWidget extends EditGameRulesScreen.NamedRuleWidget
// FIXME: Param names nightmare
this.drawName(matrices, y, x);
this.textFieldWidget.x = x + entryWidth - 44;
this.textFieldWidget.y = y;
this.textFieldWidget.setPos(x + entryWidth - 44, y);
this.textFieldWidget.render(matrices, mouseX, mouseY, tickDelta);
}
}

View file

@ -40,10 +40,10 @@ public final class EnumRuleWidget<E extends Enum<E>> extends EditGameRulesScreen
// Base translation key needs to be set before the button widget is created.
this.rootTranslationKey = translationKey;
this.buttonWidget = new ButtonWidget(10, 5, 88, 20, this.getValueText(rule.get()), (buttonWidget) -> {
this.buttonWidget = ButtonWidget.method_46430(this.getValueText(rule.get()), (buttonWidget) -> {
rule.cycle();
buttonWidget.setMessage(this.getValueText(rule.get()));
});
}).method_46433(10, 5).method_46437(88, 20).method_46431();
this.children.add(this.buttonWidget);
}
@ -62,8 +62,7 @@ public final class EnumRuleWidget<E extends Enum<E>> extends EditGameRulesScreen
// FIXME: Param names nightmare
this.drawName(matrices, y, x);
this.buttonWidget.x = x + entryWidth - 89;
this.buttonWidget.y = y;
this.buttonWidget.setPos(x + entryWidth - 89, y);
this.buttonWidget.render(matrices, mouseX, mouseY, tickDelta);
}
}

View file

@ -39,7 +39,7 @@ public class FabricCreativeGuiComponents {
final Type type;
public ItemGroupButtonWidget(int x, int y, Type type, CreativeGuiExtensions extensions) {
super(x, y, 11, 10, type.text, (bw) -> type.clickConsumer.accept(extensions));
super(x, y, 11, 10, type.text, (bw) -> type.clickConsumer.accept(extensions), EMPTY, ButtonWidget.field_40754);
this.extensions = extensions;
this.type = type;
this.gui = (CreativeInventoryScreen) extensions;
@ -47,7 +47,7 @@ public class FabricCreativeGuiComponents {
@Override
public void render(MatrixStack matrixStack, int mouseX, int mouseY, float float_1) {
this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height;
this.hovered = mouseX >= this.method_46426() && mouseY >= this.method_46427() && mouseX < this.method_46426() + this.width && mouseY < this.method_46427() + this.height;
this.visible = extensions.fabric_isButtonVisible(type);
this.active = extensions.fabric_isButtonEnabled(type);
@ -57,7 +57,7 @@ public class FabricCreativeGuiComponents {
RenderSystem.setShaderTexture(0, BUTTON_TEX);
RenderSystem.setShaderColor(1F, 1F, 1F, 1F);
this.drawTexture(matrixStack, this.x, this.y, u + (type == Type.NEXT ? 11 : 0), v, 11, 10);
this.drawTexture(matrixStack, this.method_46426(), this.method_46427(), u + (type == Type.NEXT ? 11 : 0), v, 11, 10);
if (this.hovered) {
int pageCount = (int) Math.ceil((ItemGroups.GROUPS.length - COMMON_GROUPS.size()) / 9D);

View file

@ -365,10 +365,10 @@ public class FabricItemGroupEntries implements ItemGroup.Entries {
/**
* @return True if the item of a given stack is enabled in the current {@link FeatureSet}.
* @see Item#method_45382
* @see Item#isEnabled
*/
private boolean isEnabled(ItemStack stack) {
return stack.getItem().method_45382(enabledFeatures);
return stack.getItem().isEnabled(enabledFeatures);
}
private Collection<ItemStack> getEnabledStacks(Collection<ItemStack> newStacks) {

View file

@ -28,7 +28,7 @@ import net.minecraft.util.Identifier;
@ApiStatus.Internal
public final class MinecraftItemGroups {
public static final Identifier BUILDING_BLOCKS_ID = new Identifier("minecraft:building_blocks");
public static final Identifier NATURE_ID = new Identifier("minecraft:nature");
public static final Identifier NATURAL_ID = new Identifier("minecraft:natural");
public static final Identifier FUNCTIONAL_ID = new Identifier("minecraft:functional");
public static final Identifier REDSTONE_ID = new Identifier("minecraft:redstone");
public static final Identifier HOTBAR_ID = new Identifier("minecraft:hotbar");
@ -42,7 +42,7 @@ public final class MinecraftItemGroups {
public static final Map<ItemGroup, Identifier> GROUP_ID_MAP = new ImmutableMap.Builder<ItemGroup, Identifier>()
.put(ItemGroups.BUILDING_BLOCKS, MinecraftItemGroups.BUILDING_BLOCKS_ID)
.put(ItemGroups.NATURE, MinecraftItemGroups.NATURE_ID)
.put(ItemGroups.NATURAL, MinecraftItemGroups.NATURAL_ID)
.put(ItemGroups.FUNCTIONAL, MinecraftItemGroups.FUNCTIONAL_ID)
.put(ItemGroups.REDSTONE, MinecraftItemGroups.REDSTONE_ID)
.put(ItemGroups.HOTBAR, MinecraftItemGroups.HOTBAR_ID)

View file

@ -18,6 +18,9 @@ package net.fabricmc.fabric.test.model;
import java.util.function.Supplier;
import org.joml.AxisAngle4f;
import org.joml.Quaternionf;
import net.minecraft.client.render.TexturedRenderLayers;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.VertexConsumerProvider;
@ -27,7 +30,6 @@ import net.minecraft.client.render.entity.model.EntityModel;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.LivingEntity;
import net.minecraft.util.math.Vec3f;
public class BakedModelFeatureRenderer<T extends LivingEntity, M extends EntityModel<T>> extends FeatureRenderer<T, M> {
private Supplier<BakedModel> modelSupplier;
@ -44,7 +46,7 @@ public class BakedModelFeatureRenderer<T extends LivingEntity, M extends EntityM
matrices.push();
//matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(headYaw));
//matrices.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(headPitch));
matrices.multiply(Vec3f.POSITIVE_Y.getRadialQuaternion(animationProgress * 0.07F));
matrices.multiply(new Quaternionf(new AxisAngle4f(animationProgress * 0.07F, 0, 1, 0)));
matrices.scale(-0.75F, -0.75F, 0.75F);
float aboveHead = (float) (Math.sin(animationProgress * 0.08F)) * 0.5F + 0.5F;
matrices.translate(-0.5F, 0.75F + aboveHead, -0.5F);

View file

@ -39,13 +39,22 @@ final class ChannelScreen extends Screen {
@Override
protected void init() {
this.s2cButton = this.addDrawableChild(new ButtonWidget(this.width / 2 - 55, 5, 50, 20, Text.literal("S2C"), this::toS2C, (button, matrices, mouseX, mouseY) -> {
this.renderTooltip(matrices, Text.literal("Packets this client can receive"), mouseX, mouseY);
}));
this.c2sButton = this.addDrawableChild(new ButtonWidget(this.width / 2 + 5, 5, 50, 20, Text.literal("C2S"), this::toC2S, (button, matrices, mouseX, mouseY) -> {
this.renderTooltip(matrices, Text.literal("Packets the server can receive"), mouseX, mouseY);
}));
this.closeButton = this.addDrawableChild(new ButtonWidget(this.width / 2 - 60, this.height - 25, 120, 20, Text.literal("Close"), button -> this.close()));
this.s2cButton = this.addDrawableChild(ButtonWidget.method_46430(Text.literal("S2C"), this::toS2C)
.method_46433(this.width / 2 - 55, 5)
.method_46437(50, 20)
.method_46436((button2, matrices1, mouseX1, mouseY1) -> {
this.renderTooltip(matrices1, Text.literal("Packets this client can receive"), mouseX1, mouseY1);
}).method_46431());
this.c2sButton = this.addDrawableChild(ButtonWidget.method_46430(Text.literal("C2S"), this::toC2S)
.method_46433(this.width / 2 + 5, 5)
.method_46437(50, 20)
.method_46436((button1, matrices, mouseX, mouseY) -> {
this.renderTooltip(matrices, Text.literal("Packets the server can receive"), mouseX, mouseY);
}).method_46431());
this.closeButton = this.addDrawableChild(ButtonWidget.method_46430(Text.literal("Close"), button -> this.close())
.method_46433(this.width / 2 - 60, this.height - 25)
.method_46437(120, 20)
.method_46431());
this.channelList = this.addDrawable(new ChannelList(this.client, this.width, this.height - 60, 30, this.height - 30, this.textRenderer.fontHeight + 2));
}

View file

@ -18,7 +18,7 @@ package net.fabricmc.fabric.api.object.builder.v1.client.model;
import net.minecraft.item.Item;
import net.minecraft.util.Identifier;
import net.minecraft.client.item.UnclampedModelPredicateProvider;
import net.minecraft.client.item.ClampedModelPredicateProvider;
import net.fabricmc.fabric.mixin.object.builder.client.ModelPredicateProviderRegistryAccessor;
import net.fabricmc.fabric.mixin.object.builder.client.ModelPredicateProviderRegistrySpecificAccessor;
@ -41,7 +41,7 @@ public final class FabricModelPredicateProviderRegistry {
* @param id the identifier of the provider
* @param provider the provider
*/
public static void register(Identifier id, UnclampedModelPredicateProvider provider) {
public static void register(Identifier id, ClampedModelPredicateProvider provider) {
ModelPredicateProviderRegistryAccessor.callRegister(id, provider);
}
@ -52,7 +52,7 @@ public final class FabricModelPredicateProviderRegistry {
* @param id the identifier of the provider
* @param provider the provider
*/
public static void register(Item item, Identifier id, UnclampedModelPredicateProvider provider) {
public static void register(Item item, Identifier id, ClampedModelPredicateProvider provider) {
ModelPredicateProviderRegistrySpecificAccessor.callRegister(item, id, provider);
}
}

View file

@ -19,14 +19,14 @@ package net.fabricmc.fabric.mixin.object.builder.client;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
import net.minecraft.client.item.UnclampedModelPredicateProvider;
import net.minecraft.client.item.ClampedModelPredicateProvider;
import net.minecraft.client.item.ModelPredicateProviderRegistry;
import net.minecraft.util.Identifier;
@Mixin(ModelPredicateProviderRegistry.class)
public interface ModelPredicateProviderRegistryAccessor {
@Invoker
static UnclampedModelPredicateProvider callRegister(Identifier id, UnclampedModelPredicateProvider provider) {
static ClampedModelPredicateProvider callRegister(Identifier id, ClampedModelPredicateProvider provider) {
throw new AssertionError("mixin dummy");
}
}

View file

@ -19,7 +19,7 @@ package net.fabricmc.fabric.mixin.object.builder.client;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
import net.minecraft.client.item.UnclampedModelPredicateProvider;
import net.minecraft.client.item.ClampedModelPredicateProvider;
import net.minecraft.client.item.ModelPredicateProviderRegistry;
import net.minecraft.item.Item;
import net.minecraft.util.Identifier;
@ -28,7 +28,7 @@ import net.minecraft.util.Identifier;
@Mixin(ModelPredicateProviderRegistry.class)
public interface ModelPredicateProviderRegistrySpecificAccessor {
@Invoker
static void callRegister(Item item, Identifier id, UnclampedModelPredicateProvider provider) {
static void callRegister(Item item, Identifier id, ClampedModelPredicateProvider provider) {
throw new AssertionError("mixin dummy");
}
}

View file

@ -76,7 +76,6 @@ public final class PointOfInterestHelper {
// INTERNAL METHODS
private static PointOfInterestType register(Identifier id, int ticketCount, int searchDistance, Set<BlockState> states) {
PointOfInterestTypes.POI_STATES.addAll(states);
return PointOfInterestTypes.register(Registry.POINT_OF_INTEREST_TYPE, RegistryKey.of(Registry.POINT_OF_INTEREST_TYPE_KEY, id), states, ticketCount, searchDistance);
}
}

View file

@ -2,7 +2,6 @@ accessWidener v1 named
extendable method net/minecraft/block/AbstractBlock$Settings <init> (Lnet/minecraft/block/Material;Ljava/util/function/Function;)V
extendable method net/minecraft/block/AbstractBlock$Settings <init> (Lnet/minecraft/block/Material;Lnet/minecraft/block/MapColor;)V
accessible field net/minecraft/world/poi/PointOfInterestTypes POI_STATES Ljava/util/Set;
accessible method net/minecraft/world/poi/PointOfInterestTypes register (Lnet/minecraft/util/registry/Registry;Lnet/minecraft/util/registry/RegistryKey;Ljava/util/Set;II)Lnet/minecraft/world/poi/PointOfInterestType;
extendable class net/minecraft/block/entity/BlockEntityType$BlockEntityFactory

View file

@ -17,10 +17,10 @@
package net.fabricmc.fabric.api.renderer.v1.mesh;
import org.jetbrains.annotations.Nullable;
import org.joml.Vector3f;
import net.minecraft.client.render.model.BakedQuad;
import net.minecraft.client.texture.Sprite;
import net.minecraft.util.math.Vec3f;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Vec2f;
@ -182,8 +182,8 @@ public interface MutableQuadView extends QuadView {
/**
* Same as {@link #pos(int, float, float, float)} but accepts vector type.
*/
default MutableQuadView pos(int vertexIndex, Vec3f vec) {
return pos(vertexIndex, vec.getX(), vec.getY(), vec.getZ());
default MutableQuadView pos(int vertexIndex, Vector3f vec) {
return pos(vertexIndex, vec.x(), vec.y(), vec.z());
}
/**
@ -200,8 +200,8 @@ public interface MutableQuadView extends QuadView {
/**
* Same as {@link #normal(int, float, float, float)} but accepts vector type.
*/
default MutableQuadView normal(int vertexIndex, Vec3f vec) {
return normal(vertexIndex, vec.getX(), vec.getY(), vec.getZ());
default MutableQuadView normal(int vertexIndex, Vector3f vec) {
return normal(vertexIndex, vec.x(), vec.y(), vec.z());
}
/**

View file

@ -16,8 +16,9 @@
package net.fabricmc.fabric.api.renderer.v1.mesh;
import org.joml.Vector3f;
import net.minecraft.client.texture.Sprite;
import net.minecraft.util.math.Vec3f;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Vec2f;
@ -59,13 +60,13 @@ public interface QuadEmitter extends MutableQuadView {
QuadEmitter pos(int vertexIndex, float x, float y, float z);
@Override
default QuadEmitter pos(int vertexIndex, Vec3f vec) {
default QuadEmitter pos(int vertexIndex, Vector3f vec) {
MutableQuadView.super.pos(vertexIndex, vec);
return this;
}
@Override
default QuadEmitter normal(int vertexIndex, Vec3f vec) {
default QuadEmitter normal(int vertexIndex, Vector3f vec) {
MutableQuadView.super.normal(vertexIndex, vec);
return this;
}

View file

@ -18,11 +18,11 @@ package net.fabricmc.fabric.api.renderer.v1.mesh;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.joml.Vector3f;
import net.minecraft.client.render.VertexFormats;
import net.minecraft.client.render.model.BakedQuad;
import net.minecraft.client.texture.Sprite;
import net.minecraft.util.math.Vec3f;
import net.minecraft.util.math.Direction;
import net.fabricmc.fabric.api.renderer.v1.material.RenderMaterial;
@ -104,7 +104,7 @@ public interface QuadView {
* <p>Not typically needed by models. Exposed to enable standard lighting
* utility functions for use by renderers.
*/
Vec3f faceNormal();
Vector3f faceNormal();
/**
* Generates a new BakedQuad instance with texture
@ -139,7 +139,7 @@ public interface QuadView {
* Pass a non-null target to avoid allocation - will be returned with values.
* Otherwise returns a new instance.
*/
Vec3f copyPos(int vertexIndex, @Nullable Vec3f target);
Vector3f copyPos(int vertexIndex, @Nullable Vector3f target);
/**
* Convenience: access x, y, z by index 0-2.
@ -172,7 +172,7 @@ public interface QuadView {
* Otherwise returns a new instance. Returns null if normal not present.
*/
@Nullable
Vec3f copyNormal(int vertexIndex, @Nullable Vec3f target);
Vector3f copyNormal(int vertexIndex, @Nullable Vector3f target);
/**
* Will return {@link Float#NaN} if normal not present.

View file

@ -20,14 +20,15 @@ import java.util.Arrays;
import java.util.List;
import com.google.common.collect.ImmutableList;
import org.joml.Vector3f;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.model.BakedQuad;
import net.minecraft.client.render.model.json.ModelTransformation;
import net.minecraft.client.render.model.json.Transformation;
import net.minecraft.client.texture.SpriteAtlasTexture;
import net.minecraft.util.math.Vec3f;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.MathHelper;
import net.fabricmc.fabric.api.renderer.v1.mesh.Mesh;
@ -109,10 +110,10 @@ public final class ModelHelper {
* This means you can use values from a vanilla JSON file as inputs to this method.
*/
private static Transformation makeTransform(float rotationX, float rotationY, float rotationZ, float translationX, float translationY, float translationZ, float scaleX, float scaleY, float scaleZ) {
Vec3f translation = new Vec3f(translationX, translationY, translationZ);
translation.scale(0.0625f);
translation.clamp(-5.0F, 5.0F);
return new Transformation(new Vec3f(rotationX, rotationY, rotationZ), translation, new Vec3f(scaleX, scaleY, scaleZ));
Vector3f translation = new Vector3f(translationX, translationY, translationZ);
translation.mul(0.0625f);
translation.set(MathHelper.clamp(translation.x, -5.0F, 5.0F), MathHelper.clamp(translation.y, -5.0F, 5.0F), MathHelper.clamp(translation.z, -5.0F, 5.0F));
return new Transformation(new Vector3f(rotationX, rotationY, rotationZ), translation, new Vector3f(scaleX, scaleY, scaleZ));
}
public static final Transformation TRANSFORM_BLOCK_GUI = makeTransform(30, 225, 0, 0, 0, 0, 0.625f, 0.625f, 0.625f);

View file

@ -93,7 +93,7 @@ public class SpriteFinderImpl implements SpriteFinder {
// Prefer failing with a log warning rather than risking a stack overflow.
if (badSpriteCount++ < 5) {
String errorMessage = "SpriteFinderImpl: Skipping sprite {} with broken bounds [{}, {}]x[{}, {}]. Sprite bounds should be between 0 and 1.";
LOGGER.error(errorMessage, sprite.method_45852(), sprite.getMinU(), sprite.getMaxU(), sprite.getMinV(), sprite.getMaxV());
LOGGER.error(errorMessage, sprite.getId(), sprite.getMinU(), sprite.getMaxU(), sprite.getMinV(), sprite.getMaxV());
}
return;

View file

@ -25,9 +25,9 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import net.minecraft.class_7766;
import net.minecraft.client.texture.Sprite;
import net.minecraft.client.texture.SpriteAtlasTexture;
import net.minecraft.client.texture.SpriteLoader;
import net.minecraft.util.Identifier;
import net.fabricmc.fabric.impl.renderer.SpriteFinderImpl;
@ -40,8 +40,8 @@ public class SpriteAtlasTextureMixin implements SpriteFinderImpl.SpriteFinderAcc
private SpriteFinderImpl fabric_spriteFinder = null;
@Inject(at = @At("RETURN"), method = "method_45848")
private void uploadHook(class_7766.class_7767 arg, CallbackInfo ci) {
@Inject(at = @At("RETURN"), method = "upload")
private void uploadHook(SpriteLoader.StitchResult arg, CallbackInfo ci) {
fabric_spriteFinder = null;
}

View file

@ -22,8 +22,8 @@ import java.util.function.Function;
import org.jetbrains.annotations.Nullable;
import net.minecraft.class_7775;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.render.model.Baker;
import net.minecraft.client.render.model.ModelBakeSettings;
import net.minecraft.client.render.model.UnbakedModel;
import net.minecraft.client.texture.Sprite;
@ -48,7 +48,7 @@ final class FrameUnbakedModel implements UnbakedModel {
}
@Override
public void method_45785(Function<Identifier, UnbakedModel> function) {
public void setParents(Function<Identifier, UnbakedModel> function) {
}
/*
@ -57,7 +57,7 @@ final class FrameUnbakedModel implements UnbakedModel {
*/
@Nullable
@Override
public BakedModel bake(class_7775 arg, Function<SpriteIdentifier, Sprite> textureGetter, ModelBakeSettings rotationContainer, Identifier modelId) {
public BakedModel bake(Baker baker, Function<SpriteIdentifier, Sprite> textureGetter, ModelBakeSettings rotationContainer, Identifier modelId) {
// The renderer api may not have an implementation.
// For this reason we will just null check the renderer impl
if (RendererAccess.INSTANCE.hasRenderer()) {

View file

@ -29,6 +29,7 @@ import static net.minecraft.util.math.Direction.WEST;
import java.util.BitSet;
import org.joml.Vector3f;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -37,7 +38,6 @@ import net.minecraft.client.render.block.BlockModelRenderer;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3f;
import net.minecraft.world.BlockRenderView;
import net.fabricmc.api.EnvType;
@ -284,11 +284,11 @@ public class AoCalculator {
}
/** used exclusively in irregular face to avoid new heap allocations each call. */
private final Vec3f vertexNormal = new Vec3f();
private final Vector3f vertexNormal = new Vector3f();
private void irregularFace(MutableQuadViewImpl quad) {
final Vec3f faceNorm = quad.faceNormal();
Vec3f normal;
final Vector3f faceNorm = quad.faceNormal();
Vector3f normal;
final float[] w = this.w;
final float[] aoResult = this.ao;
final int[] lightResult = this.light;
@ -298,7 +298,7 @@ public class AoCalculator {
float ao = 0, sky = 0, block = 0, maxAo = 0;
int maxSky = 0, maxBlock = 0;
final float x = normal.getX();
final float x = normal.x();
if (!MathHelper.approximatelyEquals(0f, x)) {
final Direction face = x > 0 ? Direction.EAST : Direction.WEST;
@ -316,7 +316,7 @@ public class AoCalculator {
maxBlock = b;
}
final float y = normal.getY();
final float y = normal.y();
if (!MathHelper.approximatelyEquals(0f, y)) {
final Direction face = y > 0 ? Direction.UP : Direction.DOWN;
@ -334,7 +334,7 @@ public class AoCalculator {
maxBlock = Math.max(maxBlock, b);
}
final float z = normal.getZ();
final float z = normal.z();
if (!MathHelper.approximatelyEquals(0f, z)) {
final Direction face = z > 0 ? Direction.SOUTH : Direction.NORTH;

View file

@ -19,9 +19,9 @@ package net.fabricmc.fabric.impl.client.indigo.renderer.helper;
import static net.minecraft.util.math.MathHelper.approximatelyEquals;
import org.jetbrains.annotations.NotNull;
import org.joml.Vector3f;
import net.minecraft.client.render.model.BakedQuad;
import net.minecraft.util.math.Vec3f;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Direction.Axis;
import net.minecraft.util.math.Direction.AxisDirection;
@ -193,16 +193,16 @@ public abstract class GeometryHelper {
* <p>Derived from the quad face normal and expects convex quads with all points co-planar.
*/
public static Direction lightFace(QuadView quad) {
final Vec3f normal = quad.faceNormal();
final Vector3f normal = quad.faceNormal();
switch (GeometryHelper.longestAxis(normal)) {
case X:
return normal.getX() > 0 ? Direction.EAST : Direction.WEST;
return normal.x() > 0 ? Direction.EAST : Direction.WEST;
case Y:
return normal.getY() > 0 ? Direction.UP : Direction.DOWN;
return normal.y() > 0 ? Direction.UP : Direction.DOWN;
case Z:
return normal.getZ() > 0 ? Direction.SOUTH : Direction.NORTH;
return normal.z() > 0 ? Direction.SOUTH : Direction.NORTH;
default:
// handle WTF case
@ -231,8 +231,8 @@ public abstract class GeometryHelper {
/**
* @see #longestAxis(float, float, float)
*/
public static Axis longestAxis(Vec3f vec) {
return longestAxis(vec.getX(), vec.getY(), vec.getZ());
public static Axis longestAxis(Vector3f vec) {
return longestAxis(vec.x(), vec.y(), vec.z());
}
/**

View file

@ -17,8 +17,8 @@
package net.fabricmc.fabric.impl.client.indigo.renderer.helper;
import org.jetbrains.annotations.NotNull;
import org.joml.Vector3f;
import net.minecraft.util.math.Vec3f;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3i;
@ -50,8 +50,8 @@ public abstract class NormalHelper {
/**
* Version of {@link #packNormal(float, float, float, float)} that accepts a vector type.
*/
public static int packNormal(Vec3f normal, float w) {
return packNormal(normal.getX(), normal.getY(), normal.getZ(), w);
public static int packNormal(Vector3f normal, float w) {
return packNormal(normal.x(), normal.y(), normal.z(), w);
}
/**
@ -71,7 +71,7 @@ public abstract class NormalHelper {
* <p>Will work with triangles also. Assumes counter-clockwise winding order, which is the norm.
* Expects convex quads with all points co-planar.
*/
public static void computeFaceNormal(@NotNull Vec3f saveTo, QuadView q) {
public static void computeFaceNormal(@NotNull Vector3f saveTo, QuadView q) {
final Direction nominalFace = q.nominalFace();
if (GeometryHelper.isQuadParallelToFace(nominalFace, q)) {

View file

@ -32,9 +32,9 @@ import static net.fabricmc.fabric.impl.client.indigo.renderer.mesh.EncodingForma
import static net.fabricmc.fabric.impl.client.indigo.renderer.mesh.EncodingFormat.VERTEX_Z;
import com.google.common.base.Preconditions;
import org.joml.Vector3f;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Vec3f;
import net.fabricmc.fabric.api.renderer.v1.material.RenderMaterial;
import net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView;
@ -51,7 +51,7 @@ public class QuadViewImpl implements QuadView {
protected Direction nominalFace;
/** True when geometry flags or light face may not match geometry. */
protected boolean isGeometryInvalid = true;
protected final Vec3f faceNormal = new Vec3f();
protected final Vector3f faceNormal = new Vector3f();
private boolean shade = true;
/** Size and where it comes from will vary in subtypes. But in all cases quad is fully encoded to array. */
@ -153,7 +153,7 @@ public class QuadViewImpl implements QuadView {
}
@Override
public final Vec3f faceNormal() {
public final Vector3f faceNormal() {
computeGeometry();
return faceNormal;
}
@ -167,15 +167,15 @@ public class QuadViewImpl implements QuadView {
RenderMaterial material = quad.material();
System.arraycopy(data, baseIndex, quad.data, quad.baseIndex, EncodingFormat.TOTAL_STRIDE);
quad.material(material);
quad.faceNormal.set(faceNormal.getX(), faceNormal.getY(), faceNormal.getZ());
quad.faceNormal.set(faceNormal.x(), faceNormal.y(), faceNormal.z());
quad.nominalFace = this.nominalFace;
quad.isGeometryInvalid = false;
}
@Override
public Vec3f copyPos(int vertexIndex, Vec3f target) {
public Vector3f copyPos(int vertexIndex, Vector3f target) {
if (target == null) {
target = new Vec3f();
target = new Vector3f();
}
final int index = baseIndex + vertexIndex * VERTEX_STRIDE + VERTEX_X;
@ -213,10 +213,10 @@ public class QuadViewImpl implements QuadView {
}
@Override
public Vec3f copyNormal(int vertexIndex, Vec3f target) {
public Vector3f copyNormal(int vertexIndex, Vector3f target) {
if (hasNormal(vertexIndex)) {
if (target == null) {
target = new Vec3f();
target = new Vector3f();
}
final int normal = data[normalIndex(vertexIndex)];

View file

@ -21,6 +21,10 @@ import static net.fabricmc.fabric.impl.client.indigo.renderer.helper.GeometryHel
import java.util.function.Function;
import org.joml.Matrix3f;
import org.joml.Matrix4f;
import org.joml.Vector3f;
import net.minecraft.block.BlockState;
import net.minecraft.client.render.LightmapTextureManager;
import net.minecraft.client.render.RenderLayer;
@ -28,9 +32,6 @@ import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.WorldRenderer;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Matrix3f;
import net.minecraft.util.math.Matrix4f;
import net.minecraft.util.math.Vec3f;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext.QuadTransform;
import net.fabricmc.fabric.impl.client.indigo.renderer.aocalc.AoCalculator;
@ -47,7 +48,7 @@ public abstract class AbstractQuadRenderer {
protected final BlockRenderInfo blockInfo;
protected final AoCalculator aoCalc;
protected final QuadTransform transform;
protected final Vec3f normalVec = new Vec3f();
protected final Vector3f normalVec = new Vector3f();
protected abstract Matrix4f matrix();
@ -82,15 +83,15 @@ public abstract class AbstractQuadRenderer {
bufferQuad(bufferFunc.apply(renderLayer), quad, matrix(), overlay(), normalMatrix(), normalVec);
}
public static void bufferQuad(VertexConsumer buff, MutableQuadViewImpl quad, Matrix4f matrix, int overlay, Matrix3f normalMatrix, Vec3f normalVec) {
public static void bufferQuad(VertexConsumer buff, MutableQuadViewImpl quad, Matrix4f matrix, int overlay, Matrix3f normalMatrix, Vector3f normalVec) {
final boolean useNormals = quad.hasVertexNormals();
if (useNormals) {
quad.populateMissingNormals();
} else {
final Vec3f faceNormal = quad.faceNormal();
normalVec.set(faceNormal.getX(), faceNormal.getY(), faceNormal.getZ());
normalVec.transform(normalMatrix);
final Vector3f faceNormal = quad.faceNormal();
normalVec.set(faceNormal.x(), faceNormal.y(), faceNormal.z());
normalVec.mul(normalMatrix);
}
for (int i = 0; i < 4; i++) {
@ -103,10 +104,10 @@ public abstract class AbstractQuadRenderer {
if (useNormals) {
normalVec.set(quad.normalX(i), quad.normalY(i), quad.normalZ(i));
normalVec.transform(normalMatrix);
normalVec.mul(normalMatrix);
}
buff.normal(normalVec.getX(), normalVec.getY(), normalVec.getZ());
buff.normal(normalVec.x(), normalVec.y(), normalVec.z());
buff.next();
}
}

View file

@ -17,9 +17,8 @@
package net.fabricmc.fabric.impl.client.indigo.renderer.render;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import net.minecraft.util.math.Matrix3f;
import net.minecraft.util.math.Matrix4f;
import org.joml.Matrix3f;
import org.joml.Matrix4f;
import net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;

View file

@ -19,6 +19,9 @@ package net.fabricmc.fabric.impl.client.indigo.renderer.render;
import java.util.function.Consumer;
import java.util.function.Supplier;
import org.joml.Matrix3f;
import org.joml.Matrix4f;
import net.minecraft.block.BlockState;
import net.minecraft.client.render.LightmapTextureManager;
import net.minecraft.client.render.RenderLayer;
@ -27,10 +30,8 @@ import net.minecraft.client.render.WorldRenderer;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Matrix3f;
import net.minecraft.util.math.Matrix4f;
import net.minecraft.world.BlockRenderView;
import net.minecraft.util.math.random.Random;
import net.minecraft.world.BlockRenderView;
import net.fabricmc.fabric.api.renderer.v1.mesh.Mesh;
import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter;

View file

@ -20,6 +20,8 @@ import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier;
import org.joml.Vector3f;
import net.minecraft.block.BlockState;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.color.item.ItemColors;
@ -38,7 +40,6 @@ import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Vec3f;
import net.minecraft.util.math.random.Random;
import net.fabricmc.fabric.api.renderer.v1.material.BlendMode;
@ -68,7 +69,7 @@ public class ItemRenderContext extends AbstractRenderContext {
private final ItemColors colorMap;
private final Random random = Random.create();
private final Vec3f normalVec = new Vec3f();
private final Vector3f normalVec = new Vector3f();
private final Supplier<Random> randomSupplier = () -> {
random.setSeed(ITEM_RANDOM_SEED);

View file

@ -19,6 +19,9 @@ package net.fabricmc.fabric.impl.client.indigo.renderer.render;
import java.util.Set;
import java.util.function.Consumer;
import org.joml.Matrix3f;
import org.joml.Matrix4f;
import net.minecraft.block.BlockState;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.chunk.BlockBufferBuilderStorage;
@ -30,8 +33,6 @@ import net.minecraft.util.crash.CrashException;
import net.minecraft.util.crash.CrashReport;
import net.minecraft.util.crash.CrashReportSection;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Matrix3f;
import net.minecraft.util.math.Matrix4f;
import net.fabricmc.fabric.api.renderer.v1.mesh.Mesh;
import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter;

View file

@ -17,7 +17,7 @@
package net.fabricmc.fabric.test.client.rendering.fluid;
import net.minecraft.block.Blocks;
import net.minecraft.class_7766;
import net.minecraft.client.texture.SpriteLoader;
import net.minecraft.screen.PlayerScreenHandler;
import net.minecraft.util.Identifier;
@ -60,10 +60,11 @@ public class FabricFluidRenderingTestModClient implements ClientModInitializer {
new Identifier("fabric-rendering-fluids-v1-testmod:block/test_fluid_overlay")
));
// TODO: this looks useless - vanilla should load every sprite in the block folder already; double check
ClientSpriteRegistryCallback.event(PlayerScreenHandler.BLOCK_ATLAS_TEXTURE).register((resourceManager, sprites) -> {
class_7766.method_45830(resourceManager, new Identifier("fabric-rendering-fluids-v1-testmod:block/test_fluid_still"), sprites::put);
class_7766.method_45830(resourceManager, new Identifier("fabric-rendering-fluids-v1-testmod:block/test_fluid_flowing"), sprites::put);
class_7766.method_45830(resourceManager, new Identifier("fabric-rendering-fluids-v1-testmod:block/test_fluid_overlay"), sprites::put);
SpriteLoader.addResource(resourceManager, new Identifier("fabric-rendering-fluids-v1-testmod:block/test_fluid_still"), sprites::put);
SpriteLoader.addResource(resourceManager, new Identifier("fabric-rendering-fluids-v1-testmod:block/test_fluid_flowing"), sprites::put);
SpriteLoader.addResource(resourceManager, new Identifier("fabric-rendering-fluids-v1-testmod:block/test_fluid_overlay"), sprites::put);
});
}
}

View file

@ -17,6 +17,7 @@
package net.fabricmc.fabric.api.client.rendering.v1;
import org.jetbrains.annotations.Nullable;
import org.joml.Matrix4f;
import net.minecraft.block.BlockState;
import net.minecraft.client.render.Camera;
@ -30,7 +31,6 @@ import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.Entity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Matrix4f;
import net.minecraft.util.profiler.Profiler;
import net.fabricmc.api.EnvType;

View file

@ -16,6 +16,8 @@
package net.fabricmc.fabric.impl.client.rendering;
import org.joml.Matrix4f;
import net.minecraft.block.BlockState;
import net.minecraft.client.render.Camera;
import net.minecraft.client.render.Frustum;
@ -29,7 +31,6 @@ import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.Entity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Matrix4f;
import net.minecraft.util.profiler.Profiler;
import net.fabricmc.api.EnvType;

View file

@ -16,6 +16,7 @@
package net.fabricmc.fabric.mixin.client.rendering;
import org.joml.Matrix4f;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@ -40,7 +41,6 @@ import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.Entity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Matrix4f;
import net.fabricmc.fabric.api.client.rendering.v1.DimensionRenderingRegistry;
import net.fabricmc.fabric.api.client.rendering.v1.InvalidateRenderStateCallback;
@ -77,7 +77,7 @@ public abstract class WorldRendererMixin {
method = "render",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/render/WorldRenderer;renderLayer(Lnet/minecraft/client/render/RenderLayer;Lnet/minecraft/client/util/math/MatrixStack;DDDLnet/minecraft/util/math/Matrix4f;)V",
target = "Lnet/minecraft/client/render/WorldRenderer;renderLayer(Lnet/minecraft/client/render/RenderLayer;Lnet/minecraft/client/util/math/MatrixStack;DDDLorg/joml/Matrix4f;)V",
ordinal = 2,
shift = Shift.AFTER
)
@ -189,7 +189,7 @@ public abstract class WorldRendererMixin {
}
}
@Inject(at = @At("HEAD"), method = "renderClouds(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/util/math/Matrix4f;FDDD)V", cancellable = true)
@Inject(at = @At("HEAD"), method = "renderClouds(Lnet/minecraft/client/util/math/MatrixStack;Lorg/joml/Matrix4f;FDDD)V", cancellable = true)
private void renderCloud(MatrixStack matrices, Matrix4f matrix4f, float tickDelta, double cameraX, double cameraY, double cameraZ, CallbackInfo info) {
if (this.client.world != null) {
DimensionRenderingRegistry.CloudRenderer renderer = DimensionRenderingRegistry.getCloudRenderer(world.getRegistryKey());
@ -201,7 +201,7 @@ public abstract class WorldRendererMixin {
}
}
@Inject(at = @At(value = "INVOKE", target = "Ljava/lang/Runnable;run()V", shift = At.Shift.AFTER, ordinal = 0), method = "renderSky(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/util/math/Matrix4f;FLnet/minecraft/client/render/Camera;ZLjava/lang/Runnable;)V", cancellable = true)
@Inject(at = @At(value = "INVOKE", target = "Ljava/lang/Runnable;run()V", shift = At.Shift.AFTER, ordinal = 0), method = "renderSky(Lnet/minecraft/client/util/math/MatrixStack;Lorg/joml/Matrix4f;FLnet/minecraft/client/render/Camera;ZLjava/lang/Runnable;)V", cancellable = true)
private void renderSky(MatrixStack matrices, Matrix4f matrix4f, float tickDelta, Camera camera, boolean bl, Runnable runnable, CallbackInfo info) {
if (this.client.world != null) {
DimensionRenderingRegistry.SkyRenderer renderer = DimensionRenderingRegistry.getSkyRenderer(world.getRegistryKey());

View file

@ -39,7 +39,7 @@ public class ArmorRenderingTests implements ClientModInitializer {
armorModel = new BipedEntityModel<>(MinecraftClient.getInstance().getEntityModelLoader().getModelPart(EntityModelLayers.PLAYER_OUTER_ARMOR));
}
model.setAttributes(armorModel);
model.copyBipedStateTo(armorModel);
armorModel.setVisible(false);
armorModel.body.visible = slot == EquipmentSlot.CHEST;
armorModel.leftArm.visible = slot == EquipmentSlot.CHEST;

View file

@ -17,15 +17,15 @@
package net.fabricmc.fabric.test.rendering.client;
import com.mojang.blaze3d.systems.RenderSystem;
import org.joml.Matrix4f;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.render.DimensionEffects;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.VertexFormat;
import net.minecraft.client.render.VertexFormats;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.Matrix4f;
import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.RegistryKey;

View file

@ -29,9 +29,9 @@ import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.class_7712;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.world.CreateWorldScreen;
import net.minecraft.resource.DataConfiguration;
import net.minecraft.resource.ResourcePackManager;
import net.minecraft.resource.ResourceType;
@ -41,7 +41,7 @@ import net.fabricmc.fabric.impl.resource.loader.ModResourcePackUtil;
@Mixin(CreateWorldScreen.class)
public abstract class CreateWorldScreenMixin extends Screen {
@Unique
private static class_7712 defaultDataPackSettings;
private static DataConfiguration defaultDataConfiguration;
@Shadow
private ResourcePackManager packManager;
@ -51,21 +51,21 @@ public abstract class CreateWorldScreenMixin extends Screen {
}
@ModifyVariable(method = "create(Lnet/minecraft/client/MinecraftClient;Lnet/minecraft/client/gui/screen/Screen;)V",
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/world/CreateWorldScreen;createServerConfig(Lnet/minecraft/resource/ResourcePackManager;Lnet/minecraft/class_7712;)Lnet/minecraft/server/SaveLoading$ServerConfig;"))
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/world/CreateWorldScreen;createServerConfig(Lnet/minecraft/resource/ResourcePackManager;Lnet/minecraft/resource/DataConfiguration;)Lnet/minecraft/server/SaveLoading$ServerConfig;"))
private static ResourcePackManager onCreateResManagerInit(ResourcePackManager manager) {
// Add mod data packs to the initial res pack manager so they are active even if the user doesn't use custom data packs
manager.providers.add(new ModResourcePackCreator(ResourceType.SERVER_DATA));
return manager;
}
@Redirect(method = "create(Lnet/minecraft/client/MinecraftClient;Lnet/minecraft/client/gui/screen/Screen;)V", at = @At(value = "FIELD", target = "Lnet/minecraft/class_7712;field_40260:Lnet/minecraft/class_7712;", ordinal = 0))
private static class_7712 replaceDefaultSettings() {
return (defaultDataPackSettings = ModResourcePackUtil.createDefaultDataPackSettings());
@Redirect(method = "create(Lnet/minecraft/client/MinecraftClient;Lnet/minecraft/client/gui/screen/Screen;)V", at = @At(value = "FIELD", target = "Lnet/minecraft/resource/DataConfiguration;SAFE_MODE:Lnet/minecraft/resource/DataConfiguration;", ordinal = 0))
private static DataConfiguration replaceDefaultSettings() {
return (defaultDataConfiguration = ModResourcePackUtil.createDefaultDataConfiguration());
}
@ModifyArg(method = "create(Lnet/minecraft/client/MinecraftClient;Lnet/minecraft/client/gui/screen/Screen;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/world/CreateWorldScreen;<init>(Lnet/minecraft/client/gui/screen/Screen;Lnet/minecraft/class_7712;Lnet/minecraft/client/gui/screen/world/MoreOptionsDialog;)V"), index = 1)
private static class_7712 useReplacedDefaultSettings(class_7712 dataPackSettings) {
return defaultDataPackSettings;
@ModifyArg(method = "create(Lnet/minecraft/client/MinecraftClient;Lnet/minecraft/client/gui/screen/Screen;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/world/CreateWorldScreen;<init>(Lnet/minecraft/client/gui/screen/Screen;Lnet/minecraft/resource/DataConfiguration;Lnet/minecraft/client/gui/screen/world/MoreOptionsDialog;)V"), index = 1)
private static DataConfiguration useReplacedDefaultSettings(DataConfiguration dataPackSettings) {
return defaultDataConfiguration;
}
@Inject(method = "getScannedPack",

View file

@ -28,7 +28,7 @@ import org.apache.commons.io.IOUtils;
import org.jetbrains.annotations.Nullable;
import net.minecraft.SharedConstants;
import net.minecraft.class_7712;
import net.minecraft.resource.DataConfiguration;
import net.minecraft.resource.DataPackSettings;
import net.minecraft.resource.ResourcePack;
import net.minecraft.resource.ResourcePackProfile;
@ -109,7 +109,7 @@ public final class ModResourcePackUtil {
* {@code DataPackSettings.SAFE_MODE} used in vanilla.
* @return the default data pack settings
*/
public static class_7712 createDefaultDataPackSettings() {
public static DataConfiguration createDefaultDataConfiguration() {
ModResourcePackCreator modResourcePackCreator = new ModResourcePackCreator(ResourceType.SERVER_DATA);
List<ResourcePackProfile> moddedResourcePacks = new ArrayList<>();
modResourcePackCreator.register(moddedResourcePacks::add);
@ -129,7 +129,7 @@ public final class ModResourcePackUtil {
}
}
return new class_7712(
return new DataConfiguration(
new DataPackSettings(enabled, disabled),
FeatureFlags.DEFAULT_ENABLED_FEATURES
);

View file

@ -20,15 +20,15 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import net.minecraft.class_7712;
import net.minecraft.resource.DataConfiguration;
import net.minecraft.server.dedicated.ServerPropertiesHandler;
import net.fabricmc.fabric.impl.resource.loader.ModResourcePackUtil;
@Mixin(ServerPropertiesHandler.class)
public class ServerPropertiesHandlerMixin {
@Redirect(method = "<init>", at = @At(value = "FIELD", target = "Lnet/minecraft/class_7712;field_40260:Lnet/minecraft/class_7712;"))
private class_7712 replaceDefaultDataPackSettings() {
return ModResourcePackUtil.createDefaultDataPackSettings();
@Redirect(method = "<init>", at = @At(value = "FIELD", target = "Lnet/minecraft/resource/DataConfiguration;SAFE_MODE:Lnet/minecraft/resource/DataConfiguration;"))
private DataConfiguration replaceDefaultDataConfiguration() {
return ModResourcePackUtil.createDefaultDataConfiguration();
}
}

View file

@ -35,6 +35,6 @@ import net.fabricmc.fabric.impl.resource.loader.ModResourcePackUtil;
public class TestServerMixin {
@Redirect(method = "create", at = @At(value = "NEW", target = "(Ljava/util/List;Ljava/util/List;)Lnet/minecraft/resource/DataPackSettings;"))
private static DataPackSettings replaceDefaultDataPackSettings(List<String> enabled, List<String> disabled) {
return ModResourcePackUtil.createDefaultDataPackSettings().dataPacks();
return ModResourcePackUtil.createDefaultDataConfiguration().dataPacks();
}
}

View file

@ -39,10 +39,10 @@ class StopSoundButton extends PressableWidget {
public void render(MatrixStack matrices, int mouseX, int mouseY, float tickDelta) {
// Render the armor icon to test
RenderSystem.setShaderTexture(0, InGameHud.GUI_ICONS_TEXTURE);
DrawableHelper.drawTexture(matrices, this.x, this.y, this.width, this.height, 43, 27, 9, 9, 256, 256);
DrawableHelper.drawTexture(matrices, this.method_46426(), this.method_46427(), this.width, this.height, 43, 27, 9, 9, 256, 256);
if (this.isMouseOver(mouseX, mouseY)) {
this.screen.renderTooltip(matrices, Text.literal("Click to stop all sounds"), this.x, this.y);
this.screen.renderTooltip(matrices, Text.literal("Click to stop all sounds"), this.method_46426(), this.method_46427());
}
}

View file

@ -17,10 +17,12 @@
package net.fabricmc.fabric.api.event.client;
import java.util.Map;
import java.util.function.BiConsumer;
import net.minecraft.class_7766;
import net.minecraft.client.texture.SpriteLoader;
import net.minecraft.resource.Resource;
import net.minecraft.resource.ResourceManager;
import net.minecraft.screen.PlayerScreenHandler;
import net.minecraft.util.Identifier;
import net.fabricmc.fabric.api.event.Event;
@ -30,8 +32,8 @@ public interface ClientSpriteRegistryCallback {
/**
* Add sprites to the map of sprites that will be baked into the sprite atlas.
*
* @see class_7766#method_45834 For adding textures from a folder recursively.
* @see class_7766#method_45830 For adding a single texture.
* @see SpriteLoader#addResources(ResourceManager, String, BiConsumer) For adding textures from a folder recursively.
* @see SpriteLoader#addResource(ResourceManager, Identifier, BiConsumer) For adding a single texture.
*/
void registerSprites(ResourceManager resourceManager, Map<Identifier, Resource> sprites);
@ -42,7 +44,7 @@ public interface ClientSpriteRegistryCallback {
* @return The event for a given atlas path.
* @since 0.1.1
*
* @see net.minecraft.client.texture.SpriteAtlasTexture#BLOCK_ATLAS_TEXTURE
* @see PlayerScreenHandler#BLOCK_ATLAS_TEXTURE
*/
static Event<ClientSpriteRegistryCallback> event(Identifier atlasId) {
return SpriteRegistryCallbackHolder.eventLocal(atlasId);

View file

@ -35,12 +35,12 @@ import net.fabricmc.fabric.impl.client.texture.SpriteRegistryCallbackHolder;
@Mixin(SpriteAtlasManager.class)
public class SpriteAtlasManagerMixin {
@ModifyVariable(method = "<init>", at = @At("HEAD"))
private static Map<Identifier, SpriteAtlasManager.class_7773> initAtlases(Map<Identifier, SpriteAtlasManager.class_7773> atlases) {
private static Map<Identifier, SpriteAtlasManager.SpriteResourceLoader> initAtlases(Map<Identifier, SpriteAtlasManager.SpriteResourceLoader> atlases) {
// Make modifiable
atlases = new HashMap<>(atlases);
for (Map.Entry<Identifier, SpriteAtlasManager.class_7773> entry : atlases.entrySet()) {
SpriteAtlasManager.class_7773 resourceFinder = entry.getValue();
for (Map.Entry<Identifier, SpriteAtlasManager.SpriteResourceLoader> entry : atlases.entrySet()) {
SpriteAtlasManager.SpriteResourceLoader resourceFinder = entry.getValue();
entry.setValue(resourceManager -> {
// First run vanilla logic

View file

@ -19,6 +19,7 @@ package net.fabricmc.fabric.test.transfer.ingame.client;
import java.util.List;
import com.mojang.blaze3d.systems.RenderSystem;
import org.joml.Matrix4f;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
@ -34,7 +35,6 @@ import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.fluid.Fluids;
import net.minecraft.text.Text;
import net.minecraft.util.math.Matrix4f;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;

View file

@ -1,8 +1,9 @@
accessWidener v2 named
# Registering custom model predicate providers for item models
transitive-accessible method net/minecraft/client/item/ModelPredicateProviderRegistry register (Lnet/minecraft/util/Identifier;Lnet/minecraft/client/item/UnclampedModelPredicateProvider;)Lnet/minecraft/client/item/UnclampedModelPredicateProvider;
transitive-accessible method net/minecraft/client/item/ModelPredicateProviderRegistry register (Lnet/minecraft/item/Item;Lnet/minecraft/util/Identifier;Lnet/minecraft/client/item/UnclampedModelPredicateProvider;)V
transitive-accessible method net/minecraft/client/item/ModelPredicateProviderRegistry register (Lnet/minecraft/item/Item;Lnet/minecraft/util/Identifier;Lnet/minecraft/client/item/ClampedModelPredicateProvider;)V
transitive-accessible method net/minecraft/client/item/ModelPredicateProviderRegistry register (Lnet/minecraft/util/Identifier;Lnet/minecraft/client/item/ClampedModelPredicateProvider;)Lnet/minecraft/client/item/ClampedModelPredicateProvider;
transitive-accessible method net/minecraft/client/item/ModelPredicateProviderRegistry registerCustomModelData (Lnet/minecraft/client/item/ModelPredicateProvider;)V
# Registering custom advancement criteria
transitive-accessible method net/minecraft/advancement/criterion/Criteria register (Lnet/minecraft/advancement/criterion/Criterion;)Lnet/minecraft/advancement/criterion/Criterion;
@ -114,7 +115,6 @@ transitive-accessible field net/minecraft/inventory/SimpleInventory stacks Lnet/
### Generated access wideners below
# Constructors of non-abstract block classes
transitive-accessible method net/minecraft/block/AbstractButtonBlock <init> (Lnet/minecraft/block/AbstractBlock$Settings;IZLnet/minecraft/sound/SoundEvent;Lnet/minecraft/sound/SoundEvent;)V
transitive-accessible method net/minecraft/block/AirBlock <init> (Lnet/minecraft/block/AbstractBlock$Settings;)V
transitive-accessible method net/minecraft/block/AttachedStemBlock <init> (Lnet/minecraft/block/GourdBlock;Ljava/util/function/Supplier;Lnet/minecraft/block/AbstractBlock$Settings;)V
transitive-accessible method net/minecraft/block/AzaleaBlock <init> (Lnet/minecraft/block/AbstractBlock$Settings;)V
@ -122,6 +122,7 @@ transitive-accessible method net/minecraft/block/BarrierBlock <init> (Lnet/minec
transitive-accessible method net/minecraft/block/BigDripleafBlock <init> (Lnet/minecraft/block/AbstractBlock$Settings;)V
transitive-accessible method net/minecraft/block/BigDripleafStemBlock <init> (Lnet/minecraft/block/AbstractBlock$Settings;)V
transitive-accessible method net/minecraft/block/BlastFurnaceBlock <init> (Lnet/minecraft/block/AbstractBlock$Settings;)V
transitive-accessible method net/minecraft/block/ButtonBlock <init> (Lnet/minecraft/block/AbstractBlock$Settings;IZLnet/minecraft/sound/SoundEvent;Lnet/minecraft/sound/SoundEvent;)V
transitive-accessible method net/minecraft/block/CactusBlock <init> (Lnet/minecraft/block/AbstractBlock$Settings;)V
transitive-accessible method net/minecraft/block/CakeBlock <init> (Lnet/minecraft/block/AbstractBlock$Settings;)V
transitive-accessible method net/minecraft/block/CandleCakeBlock <init> (Lnet/minecraft/block/Block;Lnet/minecraft/block/AbstractBlock$Settings;)V

View file

@ -1,8 +1,9 @@
accessWidener v2 named
# Registering custom model predicate providers for item models
transitive-accessible method net/minecraft/client/item/ModelPredicateProviderRegistry register (Lnet/minecraft/util/Identifier;Lnet/minecraft/client/item/UnclampedModelPredicateProvider;)Lnet/minecraft/client/item/UnclampedModelPredicateProvider;
transitive-accessible method net/minecraft/client/item/ModelPredicateProviderRegistry register (Lnet/minecraft/item/Item;Lnet/minecraft/util/Identifier;Lnet/minecraft/client/item/UnclampedModelPredicateProvider;)V
transitive-accessible method net/minecraft/client/item/ModelPredicateProviderRegistry register (Lnet/minecraft/item/Item;Lnet/minecraft/util/Identifier;Lnet/minecraft/client/item/ClampedModelPredicateProvider;)V
transitive-accessible method net/minecraft/client/item/ModelPredicateProviderRegistry register (Lnet/minecraft/util/Identifier;Lnet/minecraft/client/item/ClampedModelPredicateProvider;)Lnet/minecraft/client/item/ClampedModelPredicateProvider;
transitive-accessible method net/minecraft/client/item/ModelPredicateProviderRegistry registerCustomModelData (Lnet/minecraft/client/item/ModelPredicateProvider;)V
# Registering custom advancement criteria
transitive-accessible method net/minecraft/advancement/criterion/Criteria register (Lnet/minecraft/advancement/criterion/Criterion;)Lnet/minecraft/advancement/criterion/Criterion;

View file

@ -1,60 +1,60 @@
org.gradle.jvmargs=-Xmx2560M
org.gradle.parallel=true
version=0.65.0
minecraft_version=22w42a
yarn_version=+build.19
version=0.65.1
minecraft_version=22w43a
yarn_version=+build.3
loader_version=0.14.10
prerelease=true
# Do not manually update, use the bumpversions task:
fabric-api-base-version=0.4.13
fabric-api-lookup-api-v1-version=1.6.11
fabric-biome-api-v1-version=10.0.0
fabric-blockrenderlayer-v1-version=1.1.22
fabric-command-api-v1-version=1.2.13
fabric-command-api-v2-version=2.1.9
fabric-commands-v0-version=0.2.30
fabric-containers-v0-version=0.1.36
fabric-content-registries-v0-version=3.4.1
fabric-crash-report-info-v1-version=0.2.7
fabric-data-generation-api-v1-version=6.0.0
fabric-dimensions-v1-version=2.1.33
fabric-entity-events-v1-version=1.4.20
fabric-events-interaction-v0-version=0.4.30
fabric-events-lifecycle-v0-version=0.2.30
fabric-game-rule-api-v1-version=1.0.23
fabric-gametest-api-v1-version=1.1.2
fabric-item-api-v1-version=2.0.0
fabric-item-group-api-v1-version=1.0.0
fabric-key-binding-api-v1-version=1.0.23
fabric-keybindings-v0-version=0.2.21
fabric-lifecycle-events-v1-version=2.2.1
fabric-loot-api-v2-version=1.1.7
fabric-loot-tables-v1-version=1.1.10
fabric-message-api-v1-version=5.0.5
fabric-mining-level-api-v1-version=2.1.18
fabric-models-v0-version=0.3.19
fabric-networking-api-v1-version=1.2.6
fabric-networking-v0-version=0.3.23
fabric-object-builder-api-v1-version=4.0.15
fabric-particles-v1-version=1.0.12
fabric-registry-sync-v0-version=0.9.27
fabric-renderer-api-v1-version=1.0.13
fabric-renderer-indigo-version=0.6.15
fabric-renderer-registries-v1-version=3.2.22
fabric-rendering-data-attachment-v1-version=0.3.16
fabric-rendering-fluids-v1-version=3.0.9
fabric-rendering-v0-version=1.1.24
fabric-rendering-v1-version=1.11.1
fabric-resource-conditions-api-v1-version=2.1.1
fabric-resource-loader-v0-version=0.8.0
fabric-screen-api-v1-version=1.0.28
fabric-screen-handler-api-v1-version=1.3.2
fabric-sound-api-v1-version=1.0.1
fabric-textures-v0-version=2.0.0
fabric-transfer-api-v1-version=2.1.2
fabric-transitive-access-wideners-v1-version=1.3.2
fabric-convention-tags-v1-version=1.1.3
fabric-client-tags-api-v1-version=1.0.3
fabric-api-base-version=0.4.14
fabric-api-lookup-api-v1-version=1.6.12
fabric-biome-api-v1-version=10.0.1
fabric-blockrenderlayer-v1-version=1.1.23
fabric-command-api-v1-version=1.2.14
fabric-command-api-v2-version=2.1.10
fabric-commands-v0-version=0.2.31
fabric-containers-v0-version=0.1.37
fabric-content-registries-v0-version=3.4.2
fabric-crash-report-info-v1-version=0.2.8
fabric-data-generation-api-v1-version=7.0.0
fabric-dimensions-v1-version=2.1.34
fabric-entity-events-v1-version=1.4.21
fabric-events-interaction-v0-version=0.4.31
fabric-events-lifecycle-v0-version=0.2.31
fabric-game-rule-api-v1-version=1.0.24
fabric-gametest-api-v1-version=1.1.3
fabric-item-api-v1-version=2.0.1
fabric-item-group-api-v1-version=1.0.1
fabric-key-binding-api-v1-version=1.0.24
fabric-keybindings-v0-version=0.2.22
fabric-lifecycle-events-v1-version=2.2.2
fabric-loot-api-v2-version=1.1.8
fabric-loot-tables-v1-version=1.1.11
fabric-message-api-v1-version=5.0.6
fabric-mining-level-api-v1-version=2.1.19
fabric-models-v0-version=0.3.20
fabric-networking-api-v1-version=1.2.7
fabric-networking-v0-version=0.3.24
fabric-object-builder-api-v1-version=5.0.0
fabric-particles-v1-version=1.0.13
fabric-registry-sync-v0-version=0.9.28
fabric-renderer-api-v1-version=2.0.0
fabric-renderer-indigo-version=0.6.16
fabric-renderer-registries-v1-version=3.2.23
fabric-rendering-data-attachment-v1-version=0.3.17
fabric-rendering-fluids-v1-version=3.0.10
fabric-rendering-v0-version=1.1.25
fabric-rendering-v1-version=1.11.2
fabric-resource-conditions-api-v1-version=2.1.2
fabric-resource-loader-v0-version=0.8.1
fabric-screen-api-v1-version=1.0.29
fabric-screen-handler-api-v1-version=1.3.3
fabric-sound-api-v1-version=1.0.2
fabric-textures-v0-version=2.0.1
fabric-transfer-api-v1-version=2.1.3
fabric-transitive-access-wideners-v1-version=2.0.0
fabric-convention-tags-v1-version=1.1.4
fabric-client-tags-api-v1-version=1.0.4