Merge remote-tracking branch 'architectury/1.18' into 1.18.2

This commit is contained in:
shedaniel
2022-02-19 00:58:24 +08:00
16 changed files with 212 additions and 141 deletions

View File

@@ -171,32 +171,42 @@ public class EventHandlerImplClient {
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(RenderTooltipEvent.Pre event) {
PoseStack stack = event.getPoseStack();
ClientTooltipEvent.additionalContexts().setItem(event.getItemStack());
if (ClientTooltipEvent.RENDER_PRE.invoker().renderTooltip(stack, event.getComponents(), event.getX(), event.getY()).isFalse()) {
event.setCanceled(true);
return;
try {
if (ClientTooltipEvent.RENDER_PRE.invoker().renderTooltip(stack, event.getComponents(), event.getX(), event.getY()).isFalse()) {
event.setCanceled(true);
return;
}
TooltipEventPositionContextImpl positionContext = tooltipPositionContext.get();
positionContext.reset(event.getX(), event.getY());
ClientTooltipEvent.RENDER_MODIFY_POSITION.invoker().renderTooltip(stack, positionContext);
event.setX(positionContext.getTooltipX());
event.setY(positionContext.getTooltipY());
} finally {
ClientTooltipEvent.additionalContexts().setItem(null);
}
TooltipEventPositionContextImpl positionContext = tooltipPositionContext.get();
positionContext.reset(event.getX(), event.getY());
ClientTooltipEvent.RENDER_MODIFY_POSITION.invoker().renderTooltip(stack, positionContext);
event.setX(positionContext.getTooltipX());
event.setY(positionContext.getTooltipY());
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(RenderTooltipEvent.Color event) {
PoseStack stack = event.getPoseStack();
ClientTooltipEvent.additionalContexts().setItem(event.getItemStack());
TooltipEventColorContextImpl colorContext = tooltipColorContext.get();
colorContext.reset();
colorContext.setBackgroundColor(event.getBackgroundStart());
colorContext.setOutlineGradientTopColor(event.getBorderStart());
colorContext.setOutlineGradientBottomColor(event.getBorderEnd());
ClientTooltipEvent.RENDER_MODIFY_COLOR.invoker().renderTooltip(stack, event.getX(), event.getY(), colorContext);
event.setBackground(colorContext.getBackgroundColor());
event.setBorderEnd(colorContext.getOutlineGradientBottomColor());
event.setBorderStart(colorContext.getOutlineGradientTopColor());
try {
TooltipEventColorContextImpl colorContext = tooltipColorContext.get();
colorContext.reset();
colorContext.setBackgroundColor(event.getBackgroundStart());
colorContext.setOutlineGradientTopColor(event.getBorderStart());
colorContext.setOutlineGradientBottomColor(event.getBorderEnd());
ClientTooltipEvent.RENDER_MODIFY_COLOR.invoker().renderTooltip(stack, event.getX(), event.getY(), colorContext);
event.setBackground(colorContext.getBackgroundColor());
event.setBorderEnd(colorContext.getOutlineGradientBottomColor());
event.setBorderStart(colorContext.getOutlineGradientTopColor());
} finally {
ClientTooltipEvent.additionalContexts().setItem(null);
}
}
@SubscribeEvent(priority = EventPriority.HIGH)

View File

@@ -59,7 +59,7 @@ public class MixinChunkSerializer {
ChunkDataEvent.Load load = (ChunkDataEvent.Load) event;
((EventHandlerImplCommon.WorldEventAttachment) load).architectury$attachLevel(levelRef.get());
}
level.set(null);
level.remove();
return event;
}
}

View File

@@ -32,9 +32,7 @@ public final class EventBuses {
private static final Map<String, List<Consumer<IEventBus>>> ON_REGISTERED = new HashMap<>();
public static void registerModEventBus(String modId, IEventBus bus) {
IEventBus previous = EVENT_BUS_MAP.put(modId, bus);
if (previous != null) {
EVENT_BUS_MAP.put(modId, previous);
if (EVENT_BUS_MAP.putIfAbsent(modId, bus) != bus) {
throw new IllegalStateException("Can't register event bus for mod '" + modId + "' because it was previously registered!");
}

View File

@@ -92,11 +92,11 @@ public class PlatformImpl {
private final IModInfo info;
public ModImpl(String id) {
this.container = ModList.get().getModContainerById(id).get();
this.container = ModList.get().getModContainerById(id).orElseThrow();
this.info = ModList.get().getMods().stream()
.filter(modInfo -> Objects.equals(modInfo.getModId(), id))
.findAny()
.get();
.orElseThrow();
}
@Override

View File

@@ -21,10 +21,8 @@ package dev.architectury.registry.registries.forge;
import com.google.common.base.Objects;
import com.google.common.base.Suppliers;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import com.google.common.collect.Table;
import dev.architectury.platform.forge.EventBuses;
import dev.architectury.registry.registries.Registrar;
import dev.architectury.registry.registries.RegistrarBuilder;
@@ -43,10 +41,7 @@ import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable;
import java.lang.reflect.Type;
import java.util.Iterator;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Supplier;
@@ -67,10 +62,24 @@ public class RegistriesImpl {
return null;
}
public static class Data {
private boolean collected = false;
private final Map<RegistryObject<?>, Supplier<? extends IForgeRegistryEntry<?>>> objects = new LinkedHashMap<>();
public void register(IForgeRegistry registry, RegistryObject object, Supplier<? extends IForgeRegistryEntry<?>> reference) {
if (!collected) {
objects.put(object, reference);
} else {
registry.register(reference.get());
object.updateReference(registry);
}
}
}
public static class RegistryProviderImpl implements Registries.RegistryProvider {
private final String modId;
private final Supplier<IEventBus> eventBus;
private final Table<Type, RegistryObject<?>, Supplier<? extends IForgeRegistryEntry<?>>> registry = HashBasedTable.create();
private final Map<Type, Data> registry = new HashMap<>();
private final Multimap<ResourceKey<Registry<?>>, Consumer<Registrar<?>>> listeners = HashMultimap.create();
public RegistryProviderImpl(String modId) {
@@ -125,12 +134,18 @@ public class RegistriesImpl {
IForgeRegistry registry = event.getRegistry();
Registrar<Object> archRegistry = get(registry);
for (Map.Entry<Type, Map<RegistryObject<?>, Supplier<? extends IForgeRegistryEntry<?>>>> row : RegistryProviderImpl.this.registry.rowMap().entrySet()) {
if (row.getKey() == event.getGenericType()) {
for (Map.Entry<RegistryObject<?>, Supplier<? extends IForgeRegistryEntry<?>>> entry : row.getValue().entrySet()) {
for (Map.Entry<Type, Data> typeDataEntry : RegistryProviderImpl.this.registry.entrySet()) {
if (typeDataEntry.getKey() == registry.getRegistrySuperType()) {
Data data = typeDataEntry.getValue();
data.collected = true;
for (Map.Entry<RegistryObject<?>, Supplier<? extends IForgeRegistryEntry<?>>> entry : data.objects.entrySet()) {
registry.register(entry.getValue().get());
entry.getKey().updateReference(registry);
}
data.objects.clear();
}
}
@@ -291,9 +306,9 @@ public class RegistriesImpl {
public static class ForgeBackedRegistryImpl<T extends IForgeRegistryEntry<T>> implements Registrar<T> {
private IForgeRegistry<T> delegate;
private Table<Type, RegistryObject<?>, Supplier<? extends IForgeRegistryEntry<?>>> registry;
private Map<Type, Data> registry;
public ForgeBackedRegistryImpl(Table<Type, RegistryObject<?>, Supplier<? extends IForgeRegistryEntry<?>>> registry, IForgeRegistry<T> delegate) {
public ForgeBackedRegistryImpl(Map<Type, Data> registry, IForgeRegistry<T> delegate) {
this.registry = registry;
this.delegate = delegate;
}
@@ -345,7 +360,8 @@ public class RegistriesImpl {
@Override
public @NotNull <E extends T> RegistrySupplier<E> register(ResourceLocation id, Supplier<E> supplier) {
RegistryObject registryObject = RegistryObject.of(id, delegate);
registry.put(delegate.getRegistrySuperType(), registryObject, () -> supplier.get().setRegistryName(id));
registry.computeIfAbsent(delegate.getRegistrySuperType(), type -> new Data())
.register(delegate, registryObject, () -> supplier.get().setRegistryName(id));
return new RegistrySupplier<E>() {
@Override
public @NotNull ResourceLocation getRegistryId() {