mirror of
https://github.com/FabricMC/fabric.git
synced 2025-07-28 15:09:35 -04:00
Ensure that API implementations can never be null.
This commit is contained in:
parent
5521a561ea
commit
8a8e3d81de
22 changed files with 28 additions and 43 deletions
fabric-blockrenderlayer-v1/src/main/java/net/fabricmc/fabric
fabric-containers-v0/src/main/java/net/fabricmc/fabric
api
impl
fabric-content-registries-v0/src/main/java/net/fabricmc/fabric
api/registry
impl/content/registry
mixin/content/registry
fabric-loot-tables-v1/src/main/java/net/fabricmc/fabric
fabric-models-v0/src/main/java/net/fabricmc/fabric
fabric-rendering-fluids-v1/src/main/java/net/fabricmc/fabric
api/client/render/fluid/v1
impl/client/rendering/fluid
mixin/client/rendering/fluid
fabric-rendering-v1/src/main/java/net/fabricmc/fabric
api/client/rendering/v1
impl/client/rendering
|
@ -36,7 +36,7 @@ import net.fabricmc.fabric.impl.blockrenderlayer.BlockRenderLayerMapImpl;
|
|||
* <p>Client-side only.
|
||||
*/
|
||||
public interface BlockRenderLayerMap {
|
||||
BlockRenderLayerMap INSTANCE = BlockRenderLayerMapImpl.INSTANCE;
|
||||
BlockRenderLayerMap INSTANCE = new BlockRenderLayerMapImpl();
|
||||
|
||||
/**
|
||||
* Map (or re-map) a block state with a render layer. Re-mapping is not recommended but if done, last one in wins.
|
||||
|
|
|
@ -28,7 +28,7 @@ import net.minecraft.item.Item;
|
|||
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
|
||||
|
||||
public class BlockRenderLayerMapImpl implements BlockRenderLayerMap {
|
||||
private BlockRenderLayerMapImpl() { }
|
||||
public BlockRenderLayerMapImpl() { }
|
||||
|
||||
@Override
|
||||
public void putBlock(Block block, RenderLayer renderLayer) {
|
||||
|
@ -75,8 +75,6 @@ public class BlockRenderLayerMapImpl implements BlockRenderLayerMap {
|
|||
}
|
||||
}
|
||||
|
||||
public static final BlockRenderLayerMap INSTANCE = new BlockRenderLayerMapImpl();
|
||||
|
||||
private static Map<Block, RenderLayer> blockRenderLayerMap = new HashMap<>();
|
||||
private static Map<Item, RenderLayer> itemRenderLayerMap = new HashMap<>();
|
||||
private static Map<Fluid, RenderLayer> fluidRenderLayerMap = new HashMap<>();
|
||||
|
|
|
@ -29,7 +29,7 @@ import net.fabricmc.fabric.impl.client.container.ScreenProviderRegistryImpl;
|
|||
*/
|
||||
@Deprecated
|
||||
public interface ScreenProviderRegistry {
|
||||
ScreenProviderRegistry INSTANCE = ScreenProviderRegistryImpl.INSTANCE;
|
||||
ScreenProviderRegistry INSTANCE = new ScreenProviderRegistryImpl();
|
||||
|
||||
/**
|
||||
* Register a "Container -> ContainerScreen" factory. This is used only on the client side.
|
||||
|
|
|
@ -32,7 +32,7 @@ import net.fabricmc.fabric.impl.container.ContainerProviderImpl;
|
|||
*/
|
||||
@Deprecated
|
||||
public interface ContainerProviderRegistry {
|
||||
ContainerProviderRegistry INSTANCE = ContainerProviderImpl.INSTANCE;
|
||||
ContainerProviderRegistry INSTANCE = new ContainerProviderImpl();
|
||||
|
||||
/**
|
||||
* Register a "packet buffer -> container" factory. This is used both on the client and server side.
|
||||
|
|
|
@ -31,14 +31,10 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
|
|||
import net.fabricmc.fabric.api.client.screen.ContainerScreenFactory;
|
||||
import net.fabricmc.fabric.api.client.screen.ScreenProviderRegistry;
|
||||
import net.fabricmc.fabric.api.container.ContainerFactory;
|
||||
import net.fabricmc.fabric.api.container.ContainerProviderRegistry;
|
||||
import net.fabricmc.fabric.impl.container.ContainerProviderImpl;
|
||||
|
||||
public class ScreenProviderRegistryImpl implements ScreenProviderRegistry {
|
||||
/**
|
||||
* Use the instance provided by ScreenProviderRegistry.
|
||||
*/
|
||||
public static final ScreenProviderRegistry INSTANCE = new ScreenProviderRegistryImpl();
|
||||
|
||||
private static final Logger LOGGER = LogManager.getLogger();
|
||||
|
||||
private static final Map<Identifier, ContainerFactory<HandledScreen>> FACTORIES = new HashMap<>();
|
||||
|
@ -55,7 +51,7 @@ public class ScreenProviderRegistryImpl implements ScreenProviderRegistry {
|
|||
@Override
|
||||
public <C extends ScreenHandler> void registerFactory(Identifier identifier, ContainerScreenFactory<C> containerScreenFactory) {
|
||||
registerFactory(identifier, (syncId, identifier1, player, buf) -> {
|
||||
C container = ContainerProviderImpl.INSTANCE.createContainer(syncId, identifier1, player, buf);
|
||||
C container = ((ContainerProviderImpl) ContainerProviderRegistry.INSTANCE).createContainer(syncId, identifier1, player, buf);
|
||||
|
||||
if (container == null) {
|
||||
LOGGER.error("Could not open container for {} - a null object was created!", identifier1.toString());
|
||||
|
|
|
@ -37,10 +37,6 @@ import net.fabricmc.fabric.mixin.container.ServerPlayerEntityAccessor;
|
|||
|
||||
public class ContainerProviderImpl implements ContainerProviderRegistry {
|
||||
public static final Identifier OPEN_CONTAINER = new Identifier("fabric", "container/open");
|
||||
/**
|
||||
* Use the instance provided by ContainerProviderRegistry.
|
||||
*/
|
||||
public static final ContainerProviderImpl INSTANCE = new ContainerProviderImpl();
|
||||
|
||||
private static final Logger LOGGER = LogManager.getLogger();
|
||||
|
||||
|
|
|
@ -23,5 +23,5 @@ import net.fabricmc.fabric.impl.content.registry.FuelRegistryImpl;
|
|||
* Registry of items to 0-32767 fuel burn time values, in in-game ticks.
|
||||
*/
|
||||
public interface FuelRegistry extends Item2ObjectMap<Integer> {
|
||||
FuelRegistry INSTANCE = FuelRegistryImpl.INSTANCE;
|
||||
FuelRegistry INSTANCE = new FuelRegistryImpl();
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ import net.fabricmc.fabric.impl.content.registry.LootEntryTypeRegistryImpl;
|
|||
@Deprecated
|
||||
public interface LootEntryTypeRegistry {
|
||||
@Deprecated
|
||||
LootEntryTypeRegistry INSTANCE = LootEntryTypeRegistryImpl.INSTANCE;
|
||||
LootEntryTypeRegistry INSTANCE = new LootEntryTypeRegistryImpl();
|
||||
|
||||
@Deprecated
|
||||
void register(LootPoolEntry.Serializer<?> serializer);
|
||||
|
|
|
@ -34,7 +34,6 @@ import net.fabricmc.fabric.api.registry.FuelRegistry;
|
|||
|
||||
// TODO: Clamp values to 32767 (+ add hook for mods which extend the limit to disable the check?)
|
||||
public final class FuelRegistryImpl implements FuelRegistry {
|
||||
public static final FuelRegistryImpl INSTANCE = new FuelRegistryImpl();
|
||||
private static final Logger LOGGER = LogManager.getLogger();
|
||||
private final Object2IntMap<ItemConvertible> itemCookTimes = new Object2IntLinkedOpenHashMap<>();
|
||||
private final Object2IntMap<Tag<Item>> tagCookTimes = new Object2IntLinkedOpenHashMap<>();
|
||||
|
|
|
@ -25,7 +25,6 @@ import net.fabricmc.fabric.api.registry.LootEntryTypeRegistry;
|
|||
|
||||
@Deprecated
|
||||
public final class LootEntryTypeRegistryImpl implements LootEntryTypeRegistry {
|
||||
public static final LootEntryTypeRegistryImpl INSTANCE = new LootEntryTypeRegistryImpl();
|
||||
private static final Method REGISTER_METHOD;
|
||||
|
||||
static {
|
||||
|
@ -49,7 +48,7 @@ public final class LootEntryTypeRegistryImpl implements LootEntryTypeRegistry {
|
|||
}
|
||||
}
|
||||
|
||||
private LootEntryTypeRegistryImpl() { }
|
||||
public LootEntryTypeRegistryImpl() { }
|
||||
|
||||
@Override
|
||||
public void register(LootPoolEntry.Serializer<?> serializer) {
|
||||
|
|
|
@ -27,22 +27,23 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
|||
import net.minecraft.block.entity.AbstractFurnaceBlockEntity;
|
||||
import net.minecraft.item.Item;
|
||||
|
||||
import net.fabricmc.fabric.api.registry.FuelRegistry;
|
||||
import net.fabricmc.fabric.impl.content.registry.FuelRegistryImpl;
|
||||
|
||||
@Mixin(AbstractFurnaceBlockEntity.class)
|
||||
public class MixinAbstractFurnaceBlockEntity {
|
||||
@Inject(at = @At("RETURN"), method = "createFuelTimeMap")
|
||||
private static void fuelTimeMapHook(CallbackInfoReturnable<Map<Item, Integer>> info) {
|
||||
FuelRegistryImpl.INSTANCE.apply(info.getReturnValue());
|
||||
((FuelRegistryImpl) FuelRegistry.INSTANCE).apply(info.getReturnValue());
|
||||
}
|
||||
|
||||
@Redirect(method = "canUseAsFuel", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/entity/AbstractFurnaceBlockEntity;createFuelTimeMap()Ljava/util/Map;"))
|
||||
private static Map<Item, Integer> canUseAsFuelRedirect() {
|
||||
return FuelRegistryImpl.INSTANCE.getFuelTimes();
|
||||
return ((FuelRegistryImpl) FuelRegistry.INSTANCE).getFuelTimes();
|
||||
}
|
||||
|
||||
@Redirect(method = "getFuelTime", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/entity/AbstractFurnaceBlockEntity;createFuelTimeMap()Ljava/util/Map;"))
|
||||
private Map<Item, Integer> getFuelTimeRedirect() {
|
||||
return FuelRegistryImpl.INSTANCE.getFuelTimes();
|
||||
return ((FuelRegistryImpl) FuelRegistry.INSTANCE).getFuelTimes();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,12 +24,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
||||
import net.minecraft.network.packet.s2c.play.SynchronizeTagsS2CPacket;
|
||||
|
||||
import net.fabricmc.fabric.api.registry.FuelRegistry;
|
||||
import net.fabricmc.fabric.impl.content.registry.FuelRegistryImpl;
|
||||
|
||||
@Mixin(ClientPlayNetworkHandler.class)
|
||||
public abstract class MixinClientPlayNetworkHandler {
|
||||
@Inject(at = @At("TAIL"), method = "onSynchronizeTags")
|
||||
private void onSynchronizeTagsHook(SynchronizeTagsS2CPacket packet, CallbackInfo info) {
|
||||
FuelRegistryImpl.INSTANCE.resetCache();
|
||||
((FuelRegistryImpl) FuelRegistry.INSTANCE).resetCache();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ import net.fabricmc.fabric.impl.loot.table.LootEntryTypeRegistryImpl;
|
|||
* @see #register
|
||||
*/
|
||||
public interface LootEntryTypeRegistry {
|
||||
LootEntryTypeRegistry INSTANCE = LootEntryTypeRegistryImpl.INSTANCE;
|
||||
LootEntryTypeRegistry INSTANCE = new LootEntryTypeRegistryImpl();
|
||||
|
||||
/**
|
||||
* Registers a loot entry type serializer by its ID.
|
||||
|
|
|
@ -23,9 +23,7 @@ import net.minecraft.util.JsonSerializer;
|
|||
import net.fabricmc.fabric.mixin.loot.table.LootPoolEntryTypesAccessor;
|
||||
|
||||
public final class LootEntryTypeRegistryImpl implements net.fabricmc.fabric.api.loot.v1.LootEntryTypeRegistry {
|
||||
public static final LootEntryTypeRegistryImpl INSTANCE = new LootEntryTypeRegistryImpl();
|
||||
|
||||
private LootEntryTypeRegistryImpl() { }
|
||||
public LootEntryTypeRegistryImpl() { }
|
||||
|
||||
@Override
|
||||
public void register(Identifier id, JsonSerializer<? extends LootPoolEntry> serializer) {
|
||||
|
|
|
@ -24,7 +24,7 @@ import net.minecraft.util.Identifier;
|
|||
import net.fabricmc.fabric.impl.client.model.ModelLoadingRegistryImpl;
|
||||
|
||||
public interface ModelLoadingRegistry {
|
||||
ModelLoadingRegistry INSTANCE = ModelLoadingRegistryImpl.INSTANCE;
|
||||
ModelLoadingRegistry INSTANCE = new ModelLoadingRegistryImpl();
|
||||
|
||||
/**
|
||||
* Register a model provider, which can request loading additional models.
|
||||
|
|
|
@ -178,7 +178,6 @@ public class ModelLoadingRegistryImpl implements ModelLoadingRegistry {
|
|||
}
|
||||
|
||||
private static final Logger LOGGER = LogManager.getLogger();
|
||||
public static final ModelLoadingRegistryImpl INSTANCE = new ModelLoadingRegistryImpl();
|
||||
|
||||
private final List<Function<ResourceManager, ModelVariantProvider>> variantProviderSuppliers = new ArrayList<>();
|
||||
private final List<Function<ResourceManager, ModelResourceProvider>> resourceProviderSuppliers = new ArrayList<>();
|
||||
|
@ -205,6 +204,6 @@ public class ModelLoadingRegistryImpl implements ModelLoadingRegistry {
|
|||
}
|
||||
|
||||
public static LoaderInstance begin(ModelLoader loader, ResourceManager manager) {
|
||||
return new LoaderInstance(INSTANCE, loader, manager);
|
||||
return new LoaderInstance((ModelLoadingRegistryImpl) INSTANCE, loader, manager);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -82,7 +82,7 @@ public interface FluidRenderHandler {
|
|||
* @return Whether anything is tessellated.
|
||||
*/
|
||||
default boolean renderFluid(BlockPos pos, BlockRenderView world, VertexConsumer vertexConsumer, FluidState state) {
|
||||
return FluidRenderHandlerRegistryImpl.INSTANCE.renderFluid(pos, world, vertexConsumer, state);
|
||||
return ((FluidRenderHandlerRegistryImpl) FluidRenderHandlerRegistry.INSTANCE).renderFluid(pos, world, vertexConsumer, state);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -30,7 +30,7 @@ import net.fabricmc.fabric.impl.client.rendering.fluid.FluidRenderHandlerRegistr
|
|||
* rendering.
|
||||
*/
|
||||
public interface FluidRenderHandlerRegistry {
|
||||
FluidRenderHandlerRegistry INSTANCE = FluidRenderHandlerRegistryImpl.INSTANCE;
|
||||
FluidRenderHandlerRegistry INSTANCE = new FluidRenderHandlerRegistryImpl();
|
||||
|
||||
/**
|
||||
* Get a {@link FluidRenderHandler} for a given Fluid. Supports vanilla and
|
||||
|
|
|
@ -41,7 +41,6 @@ import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandler;
|
|||
import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandlerRegistry;
|
||||
|
||||
public class FluidRenderHandlerRegistryImpl implements FluidRenderHandlerRegistry {
|
||||
public static final FluidRenderHandlerRegistryImpl INSTANCE = new FluidRenderHandlerRegistryImpl();
|
||||
private static final int DEFAULT_WATER_COLOR = BuiltinRegistries.BIOME.get(BiomeKeys.OCEAN).getWaterColor();
|
||||
private final Map<Fluid, FluidRenderHandler> handlers = new IdentityHashMap<>();
|
||||
private final Map<Fluid, FluidRenderHandler> modHandlers = new IdentityHashMap<>();
|
||||
|
@ -49,7 +48,7 @@ public class FluidRenderHandlerRegistryImpl implements FluidRenderHandlerRegistr
|
|||
|
||||
private FluidRenderer fluidRenderer;
|
||||
|
||||
private FluidRenderHandlerRegistryImpl() {
|
||||
public FluidRenderHandlerRegistryImpl() {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -37,6 +37,7 @@ import net.minecraft.util.math.BlockPos;
|
|||
import net.minecraft.world.BlockRenderView;
|
||||
|
||||
import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandler;
|
||||
import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandlerRegistry;
|
||||
import net.fabricmc.fabric.impl.client.rendering.fluid.FluidRenderHandlerRegistryImpl;
|
||||
import net.fabricmc.fabric.impl.client.rendering.fluid.FluidRendererHookContainer;
|
||||
|
||||
|
@ -56,7 +57,7 @@ public class MixinFluidRenderer {
|
|||
@Inject(at = @At("RETURN"), method = "onResourceReload")
|
||||
public void onResourceReloadReturn(CallbackInfo info) {
|
||||
FluidRenderer self = (FluidRenderer) (Object) this;
|
||||
FluidRenderHandlerRegistryImpl.INSTANCE.onFluidRendererReload(self, waterSprites, lavaSprites, waterOverlaySprite);
|
||||
((FluidRenderHandlerRegistryImpl) FluidRenderHandlerRegistry.INSTANCE).onFluidRendererReload(self, waterSprites, lavaSprites, waterOverlaySprite);
|
||||
}
|
||||
|
||||
@Inject(at = @At("HEAD"), method = "render", cancellable = true)
|
||||
|
@ -82,7 +83,7 @@ public class MixinFluidRenderer {
|
|||
@Unique
|
||||
private void tessellateViaHandler(BlockRenderView view, BlockPos pos, VertexConsumer vertexConsumer, FluidState state, CallbackInfoReturnable<Boolean> info) {
|
||||
FluidRendererHookContainer ctr = fabric_renderHandler.get();
|
||||
FluidRenderHandler handler = FluidRenderHandlerRegistryImpl.INSTANCE.getOverride(state.getFluid());
|
||||
FluidRenderHandler handler = ((FluidRenderHandlerRegistryImpl) FluidRenderHandlerRegistry.INSTANCE).getOverride(state.getFluid());
|
||||
|
||||
ctr.view = view;
|
||||
ctr.pos = pos;
|
||||
|
@ -146,7 +147,7 @@ public class MixinFluidRenderer {
|
|||
public Sprite modSideSpriteForOverlay(Sprite chk) {
|
||||
Block block = fabric_neighborBlock.get();
|
||||
|
||||
if (FluidRenderHandlerRegistryImpl.INSTANCE.isBlockTransparent(block)) {
|
||||
if (FluidRenderHandlerRegistry.INSTANCE.isBlockTransparent(block)) {
|
||||
FluidRendererHookContainer ctr = fabric_renderHandler.get();
|
||||
return ctr.handler != null && ctr.hasOverlay ? ctr.overlay : waterOverlaySprite;
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ public interface BuiltinItemRendererRegistry {
|
|||
* The singleton instance of the renderer registry.
|
||||
* Use this instance to call the methods in this interface.
|
||||
*/
|
||||
BuiltinItemRendererRegistry INSTANCE = BuiltinItemRendererRegistryImpl.INSTANCE;
|
||||
BuiltinItemRendererRegistry INSTANCE = new BuiltinItemRendererRegistryImpl();
|
||||
|
||||
/**
|
||||
* Registers the renderer for the item.
|
||||
|
|
|
@ -33,11 +33,9 @@ import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry;
|
|||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public final class BuiltinItemRendererRegistryImpl implements BuiltinItemRendererRegistry {
|
||||
public static final BuiltinItemRendererRegistryImpl INSTANCE = new BuiltinItemRendererRegistryImpl();
|
||||
|
||||
private static final Map<Item, DynamicItemRenderer> RENDERERS = new HashMap<>();
|
||||
|
||||
private BuiltinItemRendererRegistryImpl() {
|
||||
public BuiltinItemRendererRegistryImpl() {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue