More hooks for registering keybinds, render types, creative tabs, block entity renderers

This commit is contained in:
shedaniel
2020-11-02 00:06:10 +08:00
parent abb57db971
commit 76cf64adf0
24 changed files with 476 additions and 21 deletions

View File

@@ -19,9 +19,11 @@ package me.shedaniel.architectury.event.forge;
import me.shedaniel.architectury.event.EventFactory;
import me.shedaniel.architectury.event.events.*;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.event.ClientPlayerNetworkEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegisterCommandsEvent;
@@ -30,6 +32,9 @@ import net.minecraftforge.event.TickEvent.Phase;
import net.minecraftforge.event.TickEvent.ServerTickEvent;
import net.minecraftforge.event.TickEvent.WorldTickEvent;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedOutEvent;
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerRespawnEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.LogicalSide;
import net.minecraftforge.fml.event.server.FMLServerStartedEvent;
@@ -73,6 +78,21 @@ public class EventFactoryImpl implements EventFactory.Impl {
public static void event(RenderGameOverlayEvent.Post event) {
GuiEvent.RENDER_HUD.invoker().renderHud(event.getMatrixStack(), event.getPartialTicks());
}
@SubscribeEvent
public static void event(ClientPlayerNetworkEvent.LoggedInEvent event) {
PlayerEvent.CLIENT_PLAYER_JOIN.invoker().join(event.getPlayer());
}
@SubscribeEvent
public static void event(ClientPlayerNetworkEvent.LoggedOutEvent event) {
PlayerEvent.CLIENT_PLAYER_QUIT.invoker().quit(event.getPlayer());
}
@SubscribeEvent
public static void event(ClientPlayerNetworkEvent.RespawnEvent event) {
PlayerEvent.CLIENT_PLAYER_RESPAWN.invoker().respawn(event.getOldPlayer(), event.getNewPlayer());
}
}
public static class Common {
@@ -118,6 +138,21 @@ public class EventFactoryImpl implements EventFactory.Impl {
public static void event(RegisterCommandsEvent event) {
CommandRegistrationEvent.EVENT.invoker().register(event.getDispatcher());
}
@SubscribeEvent
public static void event(PlayerLoggedInEvent event) {
PlayerEvent.PLAYER_JOIN.invoker().join((ServerPlayerEntity) event.getPlayer());
}
@SubscribeEvent
public static void event(PlayerLoggedOutEvent event) {
PlayerEvent.PLAYER_QUIT.invoker().quit((ServerPlayerEntity) event.getPlayer());
}
@SubscribeEvent
public static void event(PlayerRespawnEvent event) {
PlayerEvent.PLAYER_RESPAWN.invoker().respawn((ServerPlayerEntity) event.getPlayer(), event.isEndConquered());
}
}
@OnlyIn(Dist.DEDICATED_SERVER)

View File

@@ -0,0 +1,17 @@
package me.shedaniel.architectury.registry.forge;
import me.shedaniel.architectury.registry.BlockEntityRenderers;
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.fml.client.registry.ClientRegistry;
import java.util.function.Function;
public class BlockEntityRenderersImpl implements BlockEntityRenderers.Impl {
@Override
public <T extends TileEntity> void registerRenderer(TileEntityType<T> type, Function<TileEntityRendererDispatcher, TileEntityRenderer<T>> provider) {
ClientRegistry.bindTileEntityRenderer(type, provider);
}
}

View File

@@ -0,0 +1,22 @@
package me.shedaniel.architectury.registry.forge;
import me.shedaniel.architectury.registry.CreativeTabs;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import javax.annotation.Nonnull;
import java.util.function.Supplier;
public class CreativeTabsImpl implements CreativeTabs.Impl {
@Override
public ItemGroup create(ResourceLocation resourceLocation, Supplier<ItemStack> supplier) {
return new ItemGroup(String.format("%s.%s", resourceLocation.getNamespace(), resourceLocation.getPath())) {
@Override
@Nonnull
public ItemStack makeIcon() {
return supplier.get();
}
};
}
}

View File

@@ -0,0 +1,12 @@
package me.shedaniel.architectury.registry.forge;
import me.shedaniel.architectury.registry.KeyBindings;
import net.minecraft.client.settings.KeyBinding;
import net.minecraftforge.fml.client.registry.ClientRegistry;
public class KeyBindingsImpl implements KeyBindings.Impl {
@Override
public void registerKeyBinding(KeyBinding keyBinding) {
ClientRegistry.registerKeyBinding(keyBinding);
}
}

View File

@@ -13,10 +13,10 @@ import net.minecraftforge.event.AddReloadListenerEvent;
import java.util.List;
public class ReloadListenerRegistryImpl implements ReloadListenerRegistry.Impl {
public class ReloadListenersImpl implements ReloadListenerRegistry.Impl {
private List<IFutureReloadListener> serverDataReloadListeners = Lists.newArrayList();
public ReloadListenerRegistryImpl() {
public ReloadListenersImpl() {
MinecraftForge.EVENT_BUS.<AddReloadListenerEvent>addListener(event -> {
for (IFutureReloadListener listener : serverDataReloadListeners) {
event.addListener(listener);

View File

@@ -0,0 +1,23 @@
package me.shedaniel.architectury.registry.forge;
import me.shedaniel.architectury.registry.RenderTypes;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.RenderTypeLookup;
import net.minecraft.fluid.Fluid;
public class RenderTypesImpl implements RenderTypes.Impl {
@Override
public void register(RenderType type, Block... blocks) {
for (Block block : blocks) {
RenderTypeLookup.setRenderLayer(block, type);
}
}
@Override
public void register(RenderType type, Fluid... fluids) {
for (Fluid fluid : fluids) {
RenderTypeLookup.setRenderLayer(fluid, type);
}
}
}