Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FAPI 0.86.1 sync #111

Merged
merged 23 commits into from
Aug 1, 2023
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
9386d8a
Model Loading API v1 (#3145)
Technici4n Jul 18, 2023
2e061fd
Add dynamic registry API (#3163)
Juuxel Jul 18, 2023
3265161
Fix incorrect behavior with ClientMessageEvents and CommandApi (#3182)
kevinthegreat1 Jul 18, 2023
7abfd51
Make event phase ordering logic usable in other contexts (internally …
Technici4n Jul 18, 2023
e91849a
Fix crash when beehive is broken by fake player (#3190)
SquidDev Jul 18, 2023
9172968
Fix Indigo handling of sculk sensor AO (#3200)
Technici4n Jul 18, 2023
6c31357
Some more TAWs for block creation and block loot tables (#3201)
Shnupbups Jul 18, 2023
a1a980d
Add the cherry grove to the floral biome tag (#3202)
maityyy Jul 18, 2023
132c48c
Ukrainian translations (#3169)
unroman Jul 18, 2023
cdf060b
A few transfer API improvements and deprecations (#3204)
Technici4n Jul 18, 2023
e3d1b5f
Bump version
modmuss50 Jul 18, 2023
e093fa6
Merge remote-tracking branch 'fabric-remote/1.20.1' into 0.86.0-upstr…
rinOfTheStars Jul 18, 2023
47ea1cc
Start porting process for real this time
rinOfTheStars Jul 20, 2023
ca17a92
Implement compat with Fabric's Dynamic Registry API.
rinOfTheStars Jul 20, 2023
d956ee1
Implement compat with Fabric's Fabric Model Loading API (v1), replaci…
rinOfTheStars Jul 20, 2023
fd6fbb1
Remove mixin into QSL's DynamicMetaRegistryImpl that is not actively …
rinOfTheStars Jul 20, 2023
938c696
Fix some QMJ related things
rinOfTheStars Jul 21, 2023
af2b2dc
Run checkstyle and header application, apply fix to model-loading-api…
rinOfTheStars Jul 21, 2023
80ec887
Revert weird change to RegistrySyncTest (blame codestyle auto-applica…
rinOfTheStars Jul 25, 2023
3fa7940
Apply suggestions from code review
rinOfTheStars Aug 1, 2023
eb2e3db
Upgrade to upstream FAPI 0.86.1 & QSL 6.1.0
rinOfTheStars Aug 1, 2023
2d9ecae
Remove mixins removed in last commit from quilted_fabric_registry_syn…
rinOfTheStars Aug 1, 2023
97c6225
Remove SaveLoadingMixin
rinOfTheStars Aug 1, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions deprecated/fabric-models-v0/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
archivesBaseName = "fabric-models-v0"
version = getSubprojectVersion(project)
rinOfTheStars marked this conversation as resolved.
Show resolved Hide resolved

moduleDependencies(project, [
'fabric-api-base',
'fabric-model-loading-api-v1'
])
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,12 @@
import net.minecraft.client.util.ModelIdentifier;
import net.minecraft.util.Identifier;

import net.fabricmc.fabric.impl.client.model.BakedModelManagerHooks;
import net.fabricmc.fabric.api.client.model.loading.v1.FabricBakedModelManager;

/**
* @deprecated Use {@link FabricBakedModelManager#getModel(Identifier)} instead.
*/
@Deprecated
public final class BakedModelManagerHelper {
/**
* An alternative to {@link BakedModelManager#getModel(ModelIdentifier)} that accepts an
Expand All @@ -43,7 +47,7 @@ public final class BakedModelManagerHelper {
*/
@Nullable
public static BakedModel getModel(BakedModelManager manager, Identifier id) {
return ((BakedModelManagerHooks) manager).fabric_getModel(id);
return manager.getModel(id);
}

private BakedModelManagerHelper() { }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@
import net.minecraft.resource.ResourceManager;
import net.minecraft.util.Identifier;

import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin;

/**
* @deprecated Use {@link ModelLoadingPlugin} and related classes instead.
*/
@Deprecated
@FunctionalInterface
public interface ExtraModelProvider {
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,13 @@
import net.minecraft.resource.ResourceManager;
import net.minecraft.util.Identifier;

import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin;
import net.fabricmc.fabric.impl.client.model.ModelLoadingRegistryImpl;

/**
* @deprecated Register a {@link ModelLoadingPlugin} instead.
*/
@Deprecated
public interface ModelLoadingRegistry {
ModelLoadingRegistry INSTANCE = new ModelLoadingRegistryImpl();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,13 @@
import net.minecraft.client.util.ModelIdentifier;
import net.minecraft.util.Identifier;

import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin;

/**
* The model loading context used during model providing.
* @deprecated Use {@link ModelLoadingPlugin} and related classes instead.
*/
@Deprecated
public interface ModelProviderContext {
/**
* Load a model using a {@link Identifier}, {@link ModelIdentifier}, ...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@

package net.fabricmc.fabric.api.client.model;

import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin;

/**
* @deprecated Use {@link ModelLoadingPlugin} and related classes instead.
*/
@Deprecated
public class ModelProviderException extends Exception {
public ModelProviderException(String s) {
super(s);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import net.minecraft.client.render.model.UnbakedModel;
import net.minecraft.util.Identifier;

import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin;

/**
* Interface for model resource providers.
*
Expand All @@ -41,7 +43,10 @@
*
* <ul><li>Only load files with a mod-suffixed name, such as .architect.obj,
* <li>Only load files from an explicit list of namespaces, registered elsewhere.</ul>
*
* @deprecated Use {@link ModelLoadingPlugin} and related classes instead.
*/
@Deprecated
@FunctionalInterface
public interface ModelResourceProvider {
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import net.minecraft.client.render.model.UnbakedModel;
import net.minecraft.client.util.ModelIdentifier;

import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin;

/**
* Interface for model variant providers.
*
Expand All @@ -38,7 +40,10 @@
*
* <p>Keep in mind that only *one* ModelVariantProvider may respond to a given model
* at any time.
*
* @deprecated Use {@link ModelLoadingPlugin} and related classes instead.
*/
@Deprecated
@FunctionalInterface
public interface ModelVariantProvider {
/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
/*
* Copyright 2016, 2017, 2018, 2019 FabricMC
* Copyright 2023 The Quilt Project
*
* 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.client.model;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;
import java.util.function.Function;

import net.minecraft.client.util.ModelIdentifier;
import net.minecraft.resource.ResourceManager;
import net.minecraft.util.Identifier;

import net.fabricmc.fabric.api.client.model.ExtraModelProvider;
import net.fabricmc.fabric.api.client.model.ModelAppender;
import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry;
import net.fabricmc.fabric.api.client.model.ModelProviderContext;
import net.fabricmc.fabric.api.client.model.ModelProviderException;
import net.fabricmc.fabric.api.client.model.ModelResourceProvider;
import net.fabricmc.fabric.api.client.model.ModelVariantProvider;
import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin;
import net.fabricmc.fabric.api.client.model.loading.v1.PreparableModelLoadingPlugin;
import net.fabricmc.fabric.impl.client.model.loading.ModelLoaderPluginContextImpl;

public class ModelLoadingRegistryImpl implements ModelLoadingRegistry {
private final List<ExtraModelProvider> modelProviders = new ArrayList<>();
private final List<ModelAppender> modelAppenders = new ArrayList<>();
private final List<Function<ResourceManager, ModelResourceProvider>> resourceProviderSuppliers = new ArrayList<>();
private final List<Function<ResourceManager, ModelVariantProvider>> variantProviderSuppliers = new ArrayList<>();

{
// Grabs the resource manager to use it in the main model loading code.
// When using the v1 API, data should be loaded in parallel before model loading starts.
PreparableModelLoadingPlugin.register(
(resourceManager, executor) -> CompletableFuture.completedFuture(resourceManager),
this::onInitializeModelLoader);
}

private void onInitializeModelLoader(ResourceManager resourceManager, ModelLoadingPlugin.Context pluginContext) {
Consumer<Identifier> extraModelConsumer = pluginContext::addModels;
Consumer<ModelIdentifier> extraModelConsumer2 = pluginContext::addModels;
// A bit hacky, but avoids the allocation of a new context wrapper every time.
ModelProviderContext resourceProviderContext = ((ModelLoaderPluginContextImpl) pluginContext).modelGetter::apply;

for (ExtraModelProvider provider : modelProviders) {
provider.provideExtraModels(resourceManager, extraModelConsumer);
}

for (ModelAppender appender : modelAppenders) {
appender.appendAll(resourceManager, extraModelConsumer2);
}

for (Function<ResourceManager, ModelResourceProvider> supplier : resourceProviderSuppliers) {
ModelResourceProvider provider = supplier.apply(resourceManager);

pluginContext.resolveModel().register(resolverContext -> {
try {
return provider.loadModelResource(resolverContext.id(), resourceProviderContext);
} catch (ModelProviderException e) {
throw new RuntimeException(e);
}
});
}

for (Function<ResourceManager, ModelVariantProvider> supplier : variantProviderSuppliers) {
ModelVariantProvider provider = supplier.apply(resourceManager);
((ModelLoaderPluginContextImpl) pluginContext).legacyVariantProviders().register(modelId -> {
try {
return provider.loadModelVariant(modelId, resourceProviderContext);
} catch (ModelProviderException e) {
throw new RuntimeException(e);
}
});
}
}

@Override
public void registerModelProvider(ExtraModelProvider provider) {
modelProviders.add(provider);
}

@Override
public void registerAppender(ModelAppender appender) {
modelAppenders.add(appender);
}

@Override
public void registerResourceProvider(Function<ResourceManager, ModelResourceProvider> providerSupplier) {
resourceProviderSuppliers.add(providerSupplier);
}

@Override
public void registerVariantProvider(Function<ResourceManager, ModelVariantProvider> providerSupplier) {
variantProviderSuppliers.add(providerSupplier);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,7 @@
"minecraft": {
"environment": "client"
},
"mixin": "quilted_fabric_models_v0.mixins.json",
"fabric-api:module-lifecycle": "stable",
"fabric-api:module-lifecycle": "deprecated",
"modmenu": {
"badges": [
"library"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,19 @@

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;

import org.slf4j.LoggerFactory;
import org.slf4j.Logger;

import net.minecraft.util.Identifier;

import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.impl.base.toposort.NodeSorting;

class ArrayBackedEvent<T> extends Event<T> {
static final Logger LOGGER = LoggerFactory.getLogger("fabric-api-base");

private final Function<T[], T> invokerFactory;
private final Object lock = new Object();
private T[] handlers;
Expand Down Expand Up @@ -83,7 +80,7 @@ private EventPhaseData<T> getOrCreatePhase(Identifier id, boolean sortIfCreate)
sortedPhases.add(phase);

if (sortIfCreate) {
PhaseSorting.sortPhases(sortedPhases);
NodeSorting.sort(sortedPhases, "event phases", Comparator.comparing(data -> data.id));
}
}

Expand Down Expand Up @@ -122,9 +119,8 @@ public void addPhaseOrdering(Identifier firstPhase, Identifier secondPhase) {
synchronized (lock) {
EventPhaseData<T> first = getOrCreatePhase(firstPhase, false);
EventPhaseData<T> second = getOrCreatePhase(secondPhase, false);
first.subsequentPhases.add(second);
second.previousPhases.add(first);
PhaseSorting.sortPhases(this.sortedPhases);
EventPhaseData.link(first, second);
NodeSorting.sort(this.sortedPhases, "event phases", Comparator.comparing(data -> data.id));
rebuildInvoker(handlers.length);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,18 @@
package net.fabricmc.fabric.impl.base.event;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import net.minecraft.util.Identifier;

import net.fabricmc.fabric.impl.base.toposort.SortableNode;

/**
* Data of an {@link ArrayBackedEvent} phase.
*/
class EventPhaseData<T> {
class EventPhaseData<T> extends SortableNode<EventPhaseData<T>> {
final Identifier id;
T[] listeners;
final List<EventPhaseData<T>> subsequentPhases = new ArrayList<>();
final List<EventPhaseData<T>> previousPhases = new ArrayList<>();
int visitStatus = 0; // 0: not visited, 1: visiting, 2: visited

@SuppressWarnings("unchecked")
EventPhaseData(Identifier id, Class<?> listenerClass) {
Expand All @@ -45,4 +42,9 @@ void addListener(T listener) {
listeners = Arrays.copyOf(listeners, oldLength + 1);
listeners[oldLength] = listener;
}

@Override
protected String getDescription() {
return id.toString();
}
}
Loading