mirror of
https://github.com/FabricMC/fabric.git
synced 2025-04-21 03:10:54 -04:00
22w43a (#2610)
Co-authored-by: Technici4n <13494793+Technici4n@users.noreply.github.com>
This commit is contained in:
parent
75e98211bd
commit
11ba9c3b22
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
DatagenEntrypoint.java
generators
fabric-data-generation-api-v1
src
main
java/net/fabricmc/fabric
resources
testmod/java/net/fabricmc/fabric/test/datagen
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
api/object/builder/v1/client/model
mixin/object/builder/client
main
java/net/fabricmc/fabric/api/object/builder/v1/world/poi
resources
fabric-renderer-api-v1/src
client/java/net/fabricmc/fabric
api/renderer/v1
impl/renderer
mixin/renderer/client
testmod/java/net/fabricmc/fabric/test/renderer/simple/client
fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer
aocalc
helper
mesh
render
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
impl/resource/loader
mixin/resource/loader
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
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
"FabricMC"
|
||||
],
|
||||
"depends": {
|
||||
"fabricloader": ">=0.12.0"
|
||||
"fabricloader": ">=0.14.10"
|
||||
},
|
||||
"description": "Allows for automatic data generation.",
|
||||
"mixins": [
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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)];
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue