Convert to @ExpectPlatform

This commit is contained in:
shedaniel
2020-11-12 22:33:11 +08:00
parent a86e762524
commit 213da7a20e
73 changed files with 792 additions and 1148 deletions

View File

@@ -16,417 +16,27 @@
package me.shedaniel.architectury.event.forge;
import me.shedaniel.architectury.event.EventHandler;
import me.shedaniel.architectury.event.events.PlayerEvent;
import me.shedaniel.architectury.event.events.TextureStitchEvent;
import me.shedaniel.architectury.event.events.*;
import me.shedaniel.architectury.forge.ArchitecturyForge;
import me.shedaniel.architectury.platform.forge.EventBuses;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.IGuiEventListener;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.event.*;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.CommandEvent;
import net.minecraftforge.event.RegisterCommandsEvent;
import net.minecraftforge.event.ServerChatEvent;
import net.minecraftforge.event.TickEvent.*;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.event.entity.item.ItemTossEvent;
import net.minecraftforge.event.entity.living.LivingAttackEvent;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.entity.player.*;
import net.minecraftforge.event.entity.player.PlayerEvent.*;
import net.minecraftforge.event.world.ExplosionEvent.Detonate;
import net.minecraftforge.event.world.ExplosionEvent.Start;
import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.eventbus.api.Event;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.LogicalSide;
import net.minecraftforge.fml.event.server.FMLServerStartedEvent;
import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
import net.minecraftforge.fml.event.server.FMLServerStoppedEvent;
import net.minecraftforge.fml.event.server.FMLServerStoppingEvent;
import net.minecraftforge.fml.server.ServerLifecycleHooks;
import java.util.List;
public class EventHandlerImpl implements EventHandler.Impl {
@Override
public void registerClient() {
MinecraftForge.EVENT_BUS.register(Client.class);
EventBuses.getModEventBus(ArchitecturyForge.MOD_ID).orElseThrow(() -> new IllegalStateException("Where is architectury?")).register(ModBasedEventHandlerImpl.Client.class);
}
@Override
public void registerCommon() {
MinecraftForge.EVENT_BUS.register(Common.class);
EventBuses.getModEventBus(ArchitecturyForge.MOD_ID).orElseThrow(() -> new IllegalStateException("Where is architectury?")).register(ModBasedEventHandlerImpl.Common.class);
}
@Override
public void registerServer() {
MinecraftForge.EVENT_BUS.register(Server.class);
EventBuses.getModEventBus(ArchitecturyForge.MOD_ID).orElseThrow(() -> new IllegalStateException("Where is architectury?")).register(ModBasedEventHandlerImpl.Server.class);
}
public class EventHandlerImpl {
@OnlyIn(Dist.CLIENT)
public static class Client {
@SubscribeEvent
public static void event(ItemTooltipEvent event) {
TooltipEvent.ITEM.invoker().append(event.getItemStack(), event.getToolTip(), event.getFlags());
}
@SubscribeEvent
public static void event(ClientTickEvent event) {
if (event.phase == Phase.START)
TickEvent.CLIENT_PRE.invoker().tick(Minecraft.getInstance());
else if (event.phase == Phase.END)
TickEvent.CLIENT_POST.invoker().tick(Minecraft.getInstance());
}
@SubscribeEvent
public static void event(RenderGameOverlayEvent.Post event) {
if (event.getType() == RenderGameOverlayEvent.ElementType.ALL)
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());
}
@SubscribeEvent
public static void event(GuiScreenEvent.InitGuiEvent.Pre event) {
if (GuiEvent.INIT_PRE.invoker().init(event.getGui(), event.getWidgetList(), (List<IGuiEventListener>) event.getGui().children()) == ActionResultType.FAIL) {
event.setCanceled(true);
}
}
@SubscribeEvent
public static void event(GuiScreenEvent.InitGuiEvent.Post event) {
GuiEvent.INIT_POST.invoker().init(event.getGui(), event.getWidgetList(), (List<IGuiEventListener>) event.getGui().children());
}
@SubscribeEvent
public static void event(RenderGameOverlayEvent.Text event) {
GuiEvent.DEBUG_TEXT_LEFT.invoker().gatherText(event.getLeft());
GuiEvent.DEBUG_TEXT_RIGHT.invoker().gatherText(event.getRight());
}
@SubscribeEvent
public static void event(ClientChatEvent event) {
ActionResult<String> process = ChatEvent.CLIENT.invoker().process(event.getMessage());
if (process.getObject() != null)
event.setMessage(process.getObject());
if (process.getResult() == ActionResultType.FAIL)
event.setCanceled(true);
}
@SubscribeEvent
public static void event(ClientChatReceivedEvent event) {
ActionResult<ITextComponent> process = ChatEvent.CLIENT_RECEIVED.invoker().process(event.getType(), event.getMessage(), event.getSenderUUID());
if (process.getObject() != null)
event.setMessage(process.getObject());
if (process.getResult() == ActionResultType.FAIL)
event.setCanceled(true);
}
@SubscribeEvent
public static void event(WorldEvent.Save event) {
if (event.getWorld() instanceof ClientWorld) {
ClientWorld world = (ClientWorld) event.getWorld();
LifecycleEvent.CLIENT_WORLD_LOAD.invoker().act(world);
}
}
@SubscribeEvent
public static void event(GuiScreenEvent.DrawScreenEvent.Pre event) {
if (GuiEvent.RENDER_PRE.invoker().render(event.getGui(), event.getMatrixStack(), event.getMouseX(), event.getMouseY(), event.getRenderPartialTicks()) == ActionResultType.FAIL) {
event.setCanceled(true);
}
}
@SubscribeEvent
public static void event(GuiScreenEvent.DrawScreenEvent.Post event) {
GuiEvent.RENDER_POST.invoker().render(event.getGui(), event.getMatrixStack(), event.getMouseX(), event.getMouseY(), event.getRenderPartialTicks());
}
@SubscribeEvent
public static void event(PlayerInteractEvent.RightClickEmpty event) {
InteractionEvent.CLIENT_RIGHT_CLICK_AIR.invoker().click(event.getPlayer(), event.getHand());
}
@SubscribeEvent
public static void event(PlayerInteractEvent.LeftClickEmpty event) {
InteractionEvent.CLIENT_LEFT_CLICK_AIR.invoker().click(event.getPlayer(), event.getHand());
}
@SubscribeEvent
public static void event(net.minecraftforge.client.event.TextureStitchEvent.Pre event) {
TextureStitchEvent.PRE.invoker().stitch(event.getMap(), event::addSprite);
}
@SubscribeEvent
public static void event(net.minecraftforge.client.event.TextureStitchEvent.Post event) {
TextureStitchEvent.POST.invoker().stitch(event.getMap());
}
public static void registerClient() {
MinecraftForge.EVENT_BUS.register(EventHandlerImplClient.class);
EventBuses.getModEventBus(ArchitecturyForge.MOD_ID).orElseThrow(() -> new IllegalStateException("Where is architectury?")).register(EventHandlerImplClient.ModBasedEventHandler.class);
}
public static class Common {
@SubscribeEvent
public static void event(ServerTickEvent event) {
if (event.phase == Phase.START)
TickEvent.SERVER_PRE.invoker().tick(ServerLifecycleHooks.getCurrentServer());
else if (event.phase == Phase.END)
TickEvent.SERVER_POST.invoker().tick(ServerLifecycleHooks.getCurrentServer());
}
@SubscribeEvent
public static void event(WorldTickEvent event) {
if (event.side == LogicalSide.SERVER) {
if (event.phase == Phase.START)
TickEvent.SERVER_WORLD_PRE.invoker().tick((ServerWorld) event.world);
else if (event.phase == Phase.END)
TickEvent.SERVER_WORLD_POST.invoker().tick((ServerWorld) event.world);
}
}
@SubscribeEvent
public static void event(FMLServerStartingEvent event) {
LifecycleEvent.SERVER_STARTING.invoker().stateChanged(event.getServer());
}
@SubscribeEvent
public static void event(FMLServerStartedEvent event) {
LifecycleEvent.SERVER_STARTED.invoker().stateChanged(event.getServer());
}
@SubscribeEvent
public static void event(FMLServerStoppingEvent event) {
LifecycleEvent.SERVER_STOPPING.invoker().stateChanged(event.getServer());
}
@SubscribeEvent
public static void event(FMLServerStoppedEvent event) {
LifecycleEvent.SERVER_STOPPED.invoker().stateChanged(event.getServer());
}
@SubscribeEvent
public static void event(RegisterCommandsEvent event) {
CommandRegistrationEvent.EVENT.invoker().register(event.getDispatcher(), event.getEnvironment());
}
@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());
}
@SubscribeEvent
public static void event(CommandEvent event) {
CommandPerformEvent performEvent = new CommandPerformEvent(event.getParseResults(), event.getException());
if (CommandPerformEvent.EVENT.invoker().act(performEvent) == ActionResultType.FAIL) {
event.setCanceled(true);
}
event.setParseResults(performEvent.getResults());
event.setException(performEvent.getThrowable());
}
@SubscribeEvent
public static void event(PlayerTickEvent event) {
if (event.phase == Phase.START) {
TickEvent.PLAYER_PRE.invoker().tick(event.player);
} else if (event.phase == Phase.END) {
TickEvent.PLAYER_POST.invoker().tick(event.player);
}
}
@SubscribeEvent
public static void event(ServerChatEvent event) {
ActionResult<ITextComponent> process = ChatEvent.SERVER.invoker().process(event.getPlayer(), event.getMessage(), event.getComponent());
if (process.getObject() != null)
event.setComponent(process.getObject());
if (process.getResult() == ActionResultType.FAIL)
event.setCanceled(true);
}
@SubscribeEvent
public static void event(WorldEvent.Load event) {
if (event.getWorld() instanceof ServerWorld) {
ServerWorld world = (ServerWorld) event.getWorld();
LifecycleEvent.SERVER_WORLD_LOAD.invoker().act(world);
}
}
@SubscribeEvent
public static void event(WorldEvent.Unload event) {
if (event.getWorld() instanceof ServerWorld) {
ServerWorld world = (ServerWorld) event.getWorld();
LifecycleEvent.SERVER_WORLD_UNLOAD.invoker().act(world);
}
}
@SubscribeEvent
public static void event(WorldEvent.Save event) {
if (event.getWorld() instanceof ServerWorld) {
ServerWorld world = (ServerWorld) event.getWorld();
LifecycleEvent.SERVER_WORLD_SAVE.invoker().act(world);
}
}
@SubscribeEvent
public static void event(LivingDeathEvent event) {
if (EntityEvent.LIVING_DEATH.invoker().die(event.getEntityLiving(), event.getSource()) == ActionResultType.FAIL) {
event.setCanceled(true);
}
}
@SubscribeEvent
public static void event(AdvancementEvent event) {
if (event.getPlayer() instanceof ServerPlayerEntity) {
PlayerEvent.PLAYER_ADVANCEMENT.invoker().award((ServerPlayerEntity) event.getPlayer(), event.getAdvancement());
}
}
@SubscribeEvent
public static void event(Clone event) {
if (event.getOriginal() instanceof ServerPlayerEntity && event.getPlayer() instanceof ServerPlayerEntity) {
PlayerEvent.PLAYER_CLONE.invoker().clone((ServerPlayerEntity) event.getOriginal(), (ServerPlayerEntity) event.getPlayer(), !event.isWasDeath());
}
}
@SubscribeEvent
public static void event(Start event) {
if (ExplosionEvent.PRE.invoker().explode(event.getWorld(), event.getExplosion()) == ActionResultType.FAIL) {
event.setCanceled(true);
}
}
@SubscribeEvent
public static void event(Detonate event) {
ExplosionEvent.DETONATE.invoker().explode(event.getWorld(), event.getExplosion(), event.getAffectedEntities());
}
@SubscribeEvent
public static void event(LivingAttackEvent event) {
if (EntityEvent.LIVING_ATTACK.invoker().attack(event.getEntityLiving(), event.getSource(), event.getAmount()) == ActionResultType.FAIL) {
event.setCanceled(true);
}
}
@SubscribeEvent
public static void event(EntityJoinWorldEvent event) {
if (EntityEvent.ADD.invoker().add(event.getEntity(), event.getWorld()) == ActionResultType.FAIL) {
event.setCanceled(true);
}
}
@SubscribeEvent
public static void event(ItemCraftedEvent event) {
PlayerEvent.CRAFT_ITEM.invoker().craft(event.getPlayer(), event.getCrafting(), event.getInventory());
}
@SubscribeEvent
public static void event(ItemSmeltedEvent event) {
PlayerEvent.SMELT_ITEM.invoker().smelt(event.getPlayer(), event.getSmelting());
}
@SubscribeEvent
public static void event(EntityItemPickupEvent event) {
PlayerEvent.PICKUP_ITEM_PRE.invoker().canPickup(event.getPlayer(), event.getItem(), event.getItem().getItem());
}
@SubscribeEvent
public static void event(ItemPickupEvent event) {
PlayerEvent.PICKUP_ITEM_POST.invoker().pickup(event.getPlayer(), event.getOriginalEntity(), event.getStack());
}
@SubscribeEvent
public static void event(ItemTossEvent event) {
PlayerEvent.DROP_ITEM.invoker().drop(event.getPlayer(), event.getEntityItem());
}
@SubscribeEvent
public static void event(PlayerContainerEvent.Open event) {
PlayerEvent.OPEN_MENU.invoker().open(event.getPlayer(), event.getContainer());
}
@SubscribeEvent
public static void event(PlayerContainerEvent.Close event) {
PlayerEvent.CLOSE_MENU.invoker().close(event.getPlayer(), event.getContainer());
}
@SubscribeEvent
public static void event(PlayerInteractEvent.RightClickItem event) {
ActionResult<ItemStack> result = InteractionEvent.RIGHT_CLICK_ITEM.invoker().click(event.getPlayer(), event.getHand());
if (result.getResult() != ActionResultType.PASS) {
event.setCanceled(true);
event.setCancellationResult(result.getResult());
}
}
@SubscribeEvent
public static void event(PlayerInteractEvent.RightClickBlock event) {
ActionResultType result = InteractionEvent.RIGHT_CLICK_BLOCK.invoker().click(event.getPlayer(), event.getHand(), event.getPos(), event.getFace());
if (result != ActionResultType.PASS) {
event.setCanceled(true);
event.setCancellationResult(result);
event.setUseBlock(Event.Result.DENY);
event.setUseItem(Event.Result.DENY);
}
}
@SubscribeEvent
public static void event(PlayerInteractEvent.EntityInteract event) {
ActionResultType result = InteractionEvent.INTERACT_ENTITY.invoker().interact(event.getPlayer(), event.getTarget(), event.getHand());
if (result != ActionResultType.PASS) {
event.setCanceled(true);
event.setCancellationResult(result);
}
}
@SubscribeEvent
public static void event(PlayerInteractEvent.LeftClickBlock event) {
ActionResultType result = InteractionEvent.LEFT_CLICK_BLOCK.invoker().click(event.getPlayer(), event.getHand(), event.getPos(), event.getFace());
if (result != ActionResultType.PASS) {
event.setCanceled(true);
event.setCancellationResult(result);
event.setUseBlock(Event.Result.DENY);
event.setUseItem(Event.Result.DENY);
}
}
public static void registerCommon() {
MinecraftForge.EVENT_BUS.register(EventHandlerImplCommon.class);
EventBuses.getModEventBus(ArchitecturyForge.MOD_ID).orElseThrow(() -> new IllegalStateException("Where is architectury?")).register(EventHandlerImplCommon.ModBasedEventHandler.class);
}
@OnlyIn(Dist.DEDICATED_SERVER)
public static class Server {
public static void registerServer() {
MinecraftForge.EVENT_BUS.register(EventHandlerImplServer.class);
EventBuses.getModEventBus(ArchitecturyForge.MOD_ID).orElseThrow(() -> new IllegalStateException("Where is architectury?")).register(EventHandlerImplServer.ModBasedEventHandler.class);
}
}

View File

@@ -0,0 +1,136 @@
package me.shedaniel.architectury.event.forge;
import me.shedaniel.architectury.event.events.TextureStitchEvent;
import me.shedaniel.architectury.event.events.*;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.IGuiEventListener;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.event.*;
import net.minecraftforge.event.TickEvent.ClientTickEvent;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import java.util.List;
@OnlyIn(Dist.CLIENT)
public class EventHandlerImplClient {
@SubscribeEvent
public static void event(ItemTooltipEvent event) {
TooltipEvent.ITEM.invoker().append(event.getItemStack(), event.getToolTip(), event.getFlags());
}
@SubscribeEvent
public static void event(ClientTickEvent event) {
if (event.phase == net.minecraftforge.event.TickEvent.Phase.START)
TickEvent.CLIENT_PRE.invoker().tick(Minecraft.getInstance());
else if (event.phase == net.minecraftforge.event.TickEvent.Phase.END)
TickEvent.CLIENT_POST.invoker().tick(Minecraft.getInstance());
}
@SubscribeEvent
public static void event(RenderGameOverlayEvent.Post event) {
if (event.getType() == RenderGameOverlayEvent.ElementType.ALL)
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());
}
@SubscribeEvent
public static void event(GuiScreenEvent.InitGuiEvent.Pre event) {
if (GuiEvent.INIT_PRE.invoker().init(event.getGui(), event.getWidgetList(), (List<IGuiEventListener>) event.getGui().children()) == ActionResultType.FAIL) {
event.setCanceled(true);
}
}
@SubscribeEvent
public static void event(GuiScreenEvent.InitGuiEvent.Post event) {
GuiEvent.INIT_POST.invoker().init(event.getGui(), event.getWidgetList(), (List<IGuiEventListener>) event.getGui().children());
}
@SubscribeEvent
public static void event(RenderGameOverlayEvent.Text event) {
GuiEvent.DEBUG_TEXT_LEFT.invoker().gatherText(event.getLeft());
GuiEvent.DEBUG_TEXT_RIGHT.invoker().gatherText(event.getRight());
}
@SubscribeEvent
public static void event(ClientChatEvent event) {
ActionResult<String> process = ChatEvent.CLIENT.invoker().process(event.getMessage());
if (process.getObject() != null)
event.setMessage(process.getObject());
if (process.getResult() == ActionResultType.FAIL)
event.setCanceled(true);
}
@SubscribeEvent
public static void event(ClientChatReceivedEvent event) {
ActionResult<ITextComponent> process = ChatEvent.CLIENT_RECEIVED.invoker().process(event.getType(), event.getMessage(), event.getSenderUUID());
if (process.getObject() != null)
event.setMessage(process.getObject());
if (process.getResult() == ActionResultType.FAIL)
event.setCanceled(true);
}
@SubscribeEvent
public static void event(WorldEvent.Save event) {
if (event.getWorld() instanceof ClientWorld) {
ClientWorld world = (ClientWorld) event.getWorld();
LifecycleEvent.CLIENT_WORLD_LOAD.invoker().act(world);
}
}
@SubscribeEvent
public static void event(GuiScreenEvent.DrawScreenEvent.Pre event) {
if (GuiEvent.RENDER_PRE.invoker().render(event.getGui(), event.getMatrixStack(), event.getMouseX(), event.getMouseY(), event.getRenderPartialTicks()) == ActionResultType.FAIL) {
event.setCanceled(true);
}
}
@SubscribeEvent
public static void event(GuiScreenEvent.DrawScreenEvent.Post event) {
GuiEvent.RENDER_POST.invoker().render(event.getGui(), event.getMatrixStack(), event.getMouseX(), event.getMouseY(), event.getRenderPartialTicks());
}
@SubscribeEvent
public static void event(PlayerInteractEvent.RightClickEmpty event) {
InteractionEvent.CLIENT_RIGHT_CLICK_AIR.invoker().click(event.getPlayer(), event.getHand());
}
@SubscribeEvent
public static void event(PlayerInteractEvent.LeftClickEmpty event) {
InteractionEvent.CLIENT_LEFT_CLICK_AIR.invoker().click(event.getPlayer(), event.getHand());
}
@OnlyIn(Dist.CLIENT)
public static class ModBasedEventHandler {
@SubscribeEvent
public static void event(net.minecraftforge.client.event.TextureStitchEvent.Pre event) {
TextureStitchEvent.PRE.invoker().stitch(event.getMap(), event::addSprite);
}
@SubscribeEvent
public static void event(net.minecraftforge.client.event.TextureStitchEvent.Post event) {
TextureStitchEvent.POST.invoker().stitch(event.getMap());
}
}
}

View File

@@ -0,0 +1,274 @@
package me.shedaniel.architectury.event.forge;
import me.shedaniel.architectury.event.events.*;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.event.CommandEvent;
import net.minecraftforge.event.RegisterCommandsEvent;
import net.minecraftforge.event.ServerChatEvent;
import net.minecraftforge.event.TickEvent.Phase;
import net.minecraftforge.event.TickEvent.PlayerTickEvent;
import net.minecraftforge.event.TickEvent.ServerTickEvent;
import net.minecraftforge.event.TickEvent.WorldTickEvent;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.event.entity.item.ItemTossEvent;
import net.minecraftforge.event.entity.living.LivingAttackEvent;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.entity.player.AdvancementEvent;
import net.minecraftforge.event.entity.player.EntityItemPickupEvent;
import net.minecraftforge.event.entity.player.PlayerContainerEvent;
import net.minecraftforge.event.entity.player.PlayerEvent.*;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.world.ExplosionEvent.Detonate;
import net.minecraftforge.event.world.ExplosionEvent.Start;
import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.eventbus.api.Event;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.LogicalSide;
import net.minecraftforge.fml.event.server.FMLServerStartedEvent;
import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
import net.minecraftforge.fml.event.server.FMLServerStoppedEvent;
import net.minecraftforge.fml.event.server.FMLServerStoppingEvent;
import net.minecraftforge.fml.server.ServerLifecycleHooks;
public class EventHandlerImplCommon {
@SubscribeEvent
public static void event(ServerTickEvent event) {
if (event.phase == Phase.START)
TickEvent.SERVER_PRE.invoker().tick(ServerLifecycleHooks.getCurrentServer());
else if (event.phase == Phase.END)
TickEvent.SERVER_POST.invoker().tick(ServerLifecycleHooks.getCurrentServer());
}
@SubscribeEvent
public static void event(WorldTickEvent event) {
if (event.side == LogicalSide.SERVER) {
if (event.phase == Phase.START)
TickEvent.SERVER_WORLD_PRE.invoker().tick((ServerWorld) event.world);
else if (event.phase == Phase.END)
TickEvent.SERVER_WORLD_POST.invoker().tick((ServerWorld) event.world);
}
}
@SubscribeEvent
public static void event(FMLServerStartingEvent event) {
LifecycleEvent.SERVER_STARTING.invoker().stateChanged(event.getServer());
}
@SubscribeEvent
public static void event(FMLServerStartedEvent event) {
LifecycleEvent.SERVER_STARTED.invoker().stateChanged(event.getServer());
}
@SubscribeEvent
public static void event(FMLServerStoppingEvent event) {
LifecycleEvent.SERVER_STOPPING.invoker().stateChanged(event.getServer());
}
@SubscribeEvent
public static void event(FMLServerStoppedEvent event) {
LifecycleEvent.SERVER_STOPPED.invoker().stateChanged(event.getServer());
}
@SubscribeEvent
public static void event(RegisterCommandsEvent event) {
CommandRegistrationEvent.EVENT.invoker().register(event.getDispatcher(), event.getEnvironment());
}
@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());
}
@SubscribeEvent
public static void event(CommandEvent event) {
CommandPerformEvent performEvent = new CommandPerformEvent(event.getParseResults(), event.getException());
if (CommandPerformEvent.EVENT.invoker().act(performEvent) == ActionResultType.FAIL) {
event.setCanceled(true);
}
event.setParseResults(performEvent.getResults());
event.setException(performEvent.getThrowable());
}
@SubscribeEvent
public static void event(PlayerTickEvent event) {
if (event.phase == Phase.START) {
TickEvent.PLAYER_PRE.invoker().tick(event.player);
} else if (event.phase == Phase.END) {
TickEvent.PLAYER_POST.invoker().tick(event.player);
}
}
@SubscribeEvent
public static void event(ServerChatEvent event) {
ActionResult<ITextComponent> process = ChatEvent.SERVER.invoker().process(event.getPlayer(), event.getMessage(), event.getComponent());
if (process.getObject() != null)
event.setComponent(process.getObject());
if (process.getResult() == ActionResultType.FAIL)
event.setCanceled(true);
}
@SubscribeEvent
public static void event(WorldEvent.Load event) {
if (event.getWorld() instanceof ServerWorld) {
ServerWorld world = (ServerWorld) event.getWorld();
LifecycleEvent.SERVER_WORLD_LOAD.invoker().act(world);
}
}
@SubscribeEvent
public static void event(WorldEvent.Unload event) {
if (event.getWorld() instanceof ServerWorld) {
ServerWorld world = (ServerWorld) event.getWorld();
LifecycleEvent.SERVER_WORLD_UNLOAD.invoker().act(world);
}
}
@SubscribeEvent
public static void event(WorldEvent.Save event) {
if (event.getWorld() instanceof ServerWorld) {
ServerWorld world = (ServerWorld) event.getWorld();
LifecycleEvent.SERVER_WORLD_SAVE.invoker().act(world);
}
}
@SubscribeEvent
public static void event(LivingDeathEvent event) {
if (EntityEvent.LIVING_DEATH.invoker().die(event.getEntityLiving(), event.getSource()) == ActionResultType.FAIL) {
event.setCanceled(true);
}
}
@SubscribeEvent
public static void event(AdvancementEvent event) {
if (event.getPlayer() instanceof ServerPlayerEntity) {
PlayerEvent.PLAYER_ADVANCEMENT.invoker().award((ServerPlayerEntity) event.getPlayer(), event.getAdvancement());
}
}
@SubscribeEvent
public static void event(Clone event) {
if (event.getOriginal() instanceof ServerPlayerEntity && event.getPlayer() instanceof ServerPlayerEntity) {
PlayerEvent.PLAYER_CLONE.invoker().clone((ServerPlayerEntity) event.getOriginal(), (ServerPlayerEntity) event.getPlayer(), !event.isWasDeath());
}
}
@SubscribeEvent
public static void event(Start event) {
if (ExplosionEvent.PRE.invoker().explode(event.getWorld(), event.getExplosion()) == ActionResultType.FAIL) {
event.setCanceled(true);
}
}
@SubscribeEvent
public static void event(Detonate event) {
ExplosionEvent.DETONATE.invoker().explode(event.getWorld(), event.getExplosion(), event.getAffectedEntities());
}
@SubscribeEvent
public static void event(LivingAttackEvent event) {
if (EntityEvent.LIVING_ATTACK.invoker().attack(event.getEntityLiving(), event.getSource(), event.getAmount()) == ActionResultType.FAIL) {
event.setCanceled(true);
}
}
@SubscribeEvent
public static void event(EntityJoinWorldEvent event) {
if (EntityEvent.ADD.invoker().add(event.getEntity(), event.getWorld()) == ActionResultType.FAIL) {
event.setCanceled(true);
}
}
@SubscribeEvent
public static void event(ItemCraftedEvent event) {
PlayerEvent.CRAFT_ITEM.invoker().craft(event.getPlayer(), event.getCrafting(), event.getInventory());
}
@SubscribeEvent
public static void event(ItemSmeltedEvent event) {
PlayerEvent.SMELT_ITEM.invoker().smelt(event.getPlayer(), event.getSmelting());
}
@SubscribeEvent
public static void event(EntityItemPickupEvent event) {
PlayerEvent.PICKUP_ITEM_PRE.invoker().canPickup(event.getPlayer(), event.getItem(), event.getItem().getItem());
}
@SubscribeEvent
public static void event(ItemPickupEvent event) {
PlayerEvent.PICKUP_ITEM_POST.invoker().pickup(event.getPlayer(), event.getOriginalEntity(), event.getStack());
}
@SubscribeEvent
public static void event(ItemTossEvent event) {
PlayerEvent.DROP_ITEM.invoker().drop(event.getPlayer(), event.getEntityItem());
}
@SubscribeEvent
public static void event(PlayerContainerEvent.Open event) {
PlayerEvent.OPEN_MENU.invoker().open(event.getPlayer(), event.getContainer());
}
@SubscribeEvent
public static void event(PlayerContainerEvent.Close event) {
PlayerEvent.CLOSE_MENU.invoker().close(event.getPlayer(), event.getContainer());
}
@SubscribeEvent
public static void event(PlayerInteractEvent.RightClickItem event) {
ActionResult<ItemStack> result = InteractionEvent.RIGHT_CLICK_ITEM.invoker().click(event.getPlayer(), event.getHand());
if (result.getResult() != ActionResultType.PASS) {
event.setCanceled(true);
event.setCancellationResult(result.getResult());
}
}
@SubscribeEvent
public static void event(PlayerInteractEvent.RightClickBlock event) {
ActionResultType result = InteractionEvent.RIGHT_CLICK_BLOCK.invoker().click(event.getPlayer(), event.getHand(), event.getPos(), event.getFace());
if (result != ActionResultType.PASS) {
event.setCanceled(true);
event.setCancellationResult(result);
event.setUseBlock(Event.Result.DENY);
event.setUseItem(Event.Result.DENY);
}
}
@SubscribeEvent
public static void event(PlayerInteractEvent.EntityInteract event) {
ActionResultType result = InteractionEvent.INTERACT_ENTITY.invoker().interact(event.getPlayer(), event.getTarget(), event.getHand());
if (result != ActionResultType.PASS) {
event.setCanceled(true);
event.setCancellationResult(result);
}
}
@SubscribeEvent
public static void event(PlayerInteractEvent.LeftClickBlock event) {
ActionResultType result = InteractionEvent.LEFT_CLICK_BLOCK.invoker().click(event.getPlayer(), event.getHand(), event.getPos(), event.getFace());
if (result != ActionResultType.PASS) {
event.setCanceled(true);
event.setCancellationResult(result);
event.setUseBlock(Event.Result.DENY);
event.setUseItem(Event.Result.DENY);
}
}
public static class ModBasedEventHandler {
}
}

View File

@@ -0,0 +1,12 @@
package me.shedaniel.architectury.event.forge;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.DEDICATED_SERVER)
public class EventHandlerImplServer {
@OnlyIn(Dist.DEDICATED_SERVER)
public static class ModBasedEventHandler {
}
}

View File

@@ -17,15 +17,21 @@
package me.shedaniel.architectury.forge;
import me.shedaniel.architectury.event.EventHandler;
import me.shedaniel.architectury.platform.Platform;
import me.shedaniel.architectury.platform.forge.EventBuses;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import java.util.stream.Collectors;
@Mod(ArchitecturyForge.MOD_ID)
public class ArchitecturyForge {
public static final String MOD_ID = "architectury";
public ArchitecturyForge() {
System.out.println(Platform.getMods().stream()
.map(me.shedaniel.architectury.platform.Mod::getModId)
.collect(Collectors.joining(", ")));
EventBuses.registerModEventBus(ArchitecturyForge.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus());
EventHandler.init();
}

View File

@@ -16,12 +16,10 @@
package me.shedaniel.architectury.hooks.forge;
import me.shedaniel.architectury.hooks.DyeColorHooks;
import net.minecraft.item.DyeColor;
public class DyeColorHooksImpl implements DyeColorHooks.Impl {
@Override
public int getColorValue(DyeColor dyeColor) {
public class DyeColorHooksImpl {
public static int getColorValue(DyeColor dyeColor) {
return dyeColor.getColorValue();
}
}

View File

@@ -16,12 +16,10 @@
package me.shedaniel.architectury.hooks.forge;
import me.shedaniel.architectury.hooks.EntityHooks;
import net.minecraft.entity.Entity;
public class EntityHooksImpl implements EntityHooks.Impl {
@Override
public String getEncodeId(Entity entity) {
public class EntityHooksImpl {
public static String getEncodeId(Entity entity) {
return entity.getEncodeId();
}
}

View File

@@ -16,29 +16,24 @@
package me.shedaniel.architectury.hooks.forge;
import me.shedaniel.architectury.hooks.ExplosionHooks;
import net.minecraft.entity.Entity;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.Explosion;
public class ExplosionHooksImpl implements ExplosionHooks.Impl {
@Override
public Vector3d getPosition(Explosion explosion) {
public class ExplosionHooksImpl {
public static Vector3d getPosition(Explosion explosion) {
return explosion.getPosition();
}
@Override
public Entity getSource(Explosion explosion) {
public static Entity getSource(Explosion explosion) {
return explosion.getExploder();
}
@Override
public float getRadius(Explosion explosion) {
public static float getRadius(Explosion explosion) {
return explosion.radius;
}
@Override
public void setRadius(Explosion explosion, float v) {
public static void setRadius(Explosion explosion, float v) {
explosion.radius = v;
}
}

View File

@@ -16,13 +16,11 @@
package me.shedaniel.architectury.hooks.forge;
import me.shedaniel.architectury.hooks.ItemEntityHooks;
import me.shedaniel.architectury.utils.IntValue;
import net.minecraft.entity.item.ItemEntity;
public class ItemEntityHooksImpl implements ItemEntityHooks.Impl {
@Override
public IntValue lifespan(ItemEntity entity) {
public class ItemEntityHooksImpl {
public static IntValue lifespan(ItemEntity entity) {
return new IntValue() {
@Override
public void accept(int value) {

View File

@@ -16,13 +16,11 @@
package me.shedaniel.architectury.hooks.forge;
import me.shedaniel.architectury.hooks.PackRepositoryHooks;
import net.minecraft.resources.IPackFinder;
import net.minecraft.resources.ResourcePackList;
public class PackRepositoryHooksImpl implements PackRepositoryHooks.Impl{
@Override
public void addSource(ResourcePackList resourcePackList, IPackFinder iPackFinder) {
public class PackRepositoryHooksImpl {
public static void addSource(ResourcePackList resourcePackList, IPackFinder iPackFinder) {
resourcePackList.addPackFinder(iPackFinder);
}
}

View File

@@ -16,18 +16,15 @@
package me.shedaniel.architectury.hooks.forge;
import me.shedaniel.architectury.hooks.PlayerHooks;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraftforge.common.util.FakePlayer;
public class PlayerHooksImpl implements PlayerHooks.Impl {
@Override
public boolean isFake(PlayerEntity playerEntity) {
public class PlayerHooksImpl {
public static boolean isFake(PlayerEntity playerEntity) {
return playerEntity instanceof FakePlayer;
}
@Override
public void closeContainer(PlayerEntity playerEntity) {
public static void closeContainer(PlayerEntity playerEntity) {
playerEntity.closeContainer();
}
}

View File

@@ -16,7 +16,6 @@
package me.shedaniel.architectury.hooks.forge;
import me.shedaniel.architectury.hooks.ScreenHooks;
import net.minecraft.client.gui.IGuiEventListener;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.Widget;
@@ -25,14 +24,12 @@ import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
public class ScreenHooksImpl implements ScreenHooks.Impl {
@Override
public List<Widget> getButtons(Screen screen) {
public class ScreenHooksImpl {
public static List<Widget> getButtons(Screen screen) {
return screen.buttons;
}
@Override
public <T extends Widget> T addButton(Screen screen, T t) {
public static <T extends Widget> T addButton(Screen screen, T t) {
try {
return (T) ObfuscationReflectionHelper.findMethod(Screen.class, "func_230480_a_", Widget.class).invoke(screen, t);
} catch (IllegalAccessException | InvocationTargetException e) {
@@ -40,8 +37,7 @@ public class ScreenHooksImpl implements ScreenHooks.Impl {
}
}
@Override
public <T extends IGuiEventListener> T addChild(Screen screen, T t) {
public static <T extends IGuiEventListener> T addChild(Screen screen, T t) {
try {
return (T) ObfuscationReflectionHelper.findMethod(Screen.class, "func_230481_d_", IGuiEventListener.class).invoke(screen, t);
} catch (IllegalAccessException | InvocationTargetException e) {

View File

@@ -27,18 +27,17 @@ import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.network.NetworkEvent;
import java.util.Set;
import java.util.function.Consumer;
import static me.shedaniel.architectury.networking.forge.NetworkManagerImpl.C2S;
import static me.shedaniel.architectury.networking.forge.NetworkManagerImpl.SYNC_IDS;
@OnlyIn(Dist.CLIENT)
public class ClientNetworkingManager {
public static Consumer<NetworkManagerImpl> initClient() {
public static void initClient() {
NetworkManagerImpl.CHANNEL.addListener(NetworkManagerImpl.createPacketHandler(NetworkEvent.ServerCustomPayloadEvent.class, NetworkManagerImpl.S2C));
MinecraftForge.EVENT_BUS.<ClientPlayerNetworkEvent.LoggedOutEvent>addListener(event -> NetworkManagerImpl.serverReceivables.clear());
return impl -> impl.registerS2CReceiver(SYNC_IDS, (buffer, context) -> {
NetworkManagerImpl.registerS2CReceiver(SYNC_IDS, (buffer, context) -> {
Set<ResourceLocation> receivables = NetworkManagerImpl.serverReceivables;
int size = buffer.readInt();
receivables.clear();

View File

@@ -43,9 +43,8 @@ import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
public class NetworkManagerImpl implements NetworkManager.Impl {
@Override
public void registerReceiver(NetworkManager.Side side, ResourceLocation id, NetworkReceiver receiver) {
public class NetworkManagerImpl {
public static void registerReceiver(NetworkManager.Side side, ResourceLocation id, NetworkReceiver receiver) {
if (side == NetworkManager.Side.C2S) {
registerC2SReceiver(id, receiver);
} else if (side == NetworkManager.Side.S2C) {
@@ -53,8 +52,7 @@ public class NetworkManagerImpl implements NetworkManager.Impl {
}
}
@Override
public IPacket<?> toPacket(NetworkManager.Side side, ResourceLocation id, PacketBuffer buffer) {
public static IPacket<?> toPacket(NetworkManager.Side side, ResourceLocation id, PacketBuffer buffer) {
PacketBuffer packetBuffer = new PacketBuffer(Unpooled.buffer());
packetBuffer.writeResourceLocation(id);
packetBuffer.writeBytes(buffer);
@@ -69,10 +67,10 @@ public class NetworkManagerImpl implements NetworkManager.Impl {
static final Set<ResourceLocation> serverReceivables = Sets.newHashSet();
private static final Multimap<PlayerEntity, ResourceLocation> clientReceivables = Multimaps.newMultimap(Maps.newHashMap(), Sets::newHashSet);
public NetworkManagerImpl() {
static {
CHANNEL.addListener(createPacketHandler(NetworkEvent.ClientCustomPayloadEvent.class, C2S));
DistExecutor.unsafeCallWhenOn(Dist.CLIENT, () -> ClientNetworkingManager::initClient).accept(this);
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> ClientNetworkingManager::initClient);
MinecraftForge.EVENT_BUS.<PlayerEvent.PlayerLoggedInEvent>addListener(event -> NetworkManager.sendToPlayer((ServerPlayerEntity) event.getPlayer(), SYNC_IDS, sendSyncPacket(C2S)));
MinecraftForge.EVENT_BUS.<PlayerEvent.PlayerLoggedOutEvent>addListener(event -> clientReceivables.removeAll(event.getPlayer()));
@@ -123,21 +121,19 @@ public class NetworkManagerImpl implements NetworkManager.Impl {
}
@OnlyIn(Dist.CLIENT)
public void registerS2CReceiver(ResourceLocation id, NetworkReceiver receiver) {
public static void registerS2CReceiver(ResourceLocation id, NetworkReceiver receiver) {
S2C.put(id, receiver);
}
public void registerC2SReceiver(ResourceLocation id, NetworkReceiver receiver) {
public static void registerC2SReceiver(ResourceLocation id, NetworkReceiver receiver) {
C2S.put(id, receiver);
}
@Override
public boolean canServerReceive(ResourceLocation id) {
public static boolean canServerReceive(ResourceLocation id) {
return serverReceivables.contains(id);
}
@Override
public boolean canPlayerReceive(ServerPlayerEntity player, ResourceLocation id) {
public static boolean canPlayerReceive(ServerPlayerEntity player, ResourceLocation id) {
return clientReceivables.get(player).contains(id);
}

View File

@@ -17,7 +17,6 @@
package me.shedaniel.architectury.platform.forge;
import me.shedaniel.architectury.platform.Mod;
import me.shedaniel.architectury.platform.Platform;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.ExtensionPoint;
import net.minecraftforge.fml.ModContainer;
@@ -35,54 +34,45 @@ import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class PlatformImpl implements Platform.Impl {
private final Map<String, Mod> mods = new HashMap<>();
public class PlatformImpl {
private static final Map<String, Mod> mods = new HashMap<>();
@Override
public Path getGameFolder() {
public static Path getGameFolder() {
return FMLPaths.GAMEDIR.get();
}
@Override
public Path getConfigFolder() {
public static Path getConfigFolder() {
return FMLPaths.CONFIGDIR.get();
}
@Override
public Path getModsFolder() {
public static Path getModsFolder() {
return FMLPaths.MODSDIR.get();
}
@Override
public Dist getEnv() {
public static Dist getEnv() {
return FMLEnvironment.dist;
}
@Override
public boolean isModLoaded(String id) {
public static boolean isModLoaded(String id) {
return ModList.get().isLoaded(id);
}
@Override
public Mod getMod(String id) {
return this.mods.computeIfAbsent(id, ModImpl::new);
public static Mod getMod(String id) {
return mods.computeIfAbsent(id, ModImpl::new);
}
@Override
public Collection<Mod> getMods() {
public static Collection<Mod> getMods() {
for (IModInfo mod : ModList.get().getMods()) {
getMod(mod.getModId());
}
return this.mods.values();
return mods.values();
}
@Override
public Collection<String> getModIds() {
public static Collection<String> getModIds() {
return ModList.get().getMods().stream().map(ModInfo::getModId).collect(Collectors.toList());
}
@Override
public boolean isDevelopmentEnvironment() {
public static boolean isDevelopmentEnvironment() {
return !FMLLoader.isProduction();
}

View File

@@ -16,7 +16,6 @@
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;
@@ -25,9 +24,8 @@ 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) {
public class BlockEntityRenderersImpl {
public static <T extends TileEntity> void registerRenderer(TileEntityType<T> type, Function<TileEntityRendererDispatcher, TileEntityRenderer<T>> provider) {
ClientRegistry.bindTileEntityRenderer(type, provider);
}
}

View File

@@ -25,24 +25,20 @@ import net.minecraft.block.material.MaterialColor;
import java.util.function.Function;
public class BlockPropertiesImpl implements BlockProperties.Impl {
@Override
public BlockProperties of(Material material, MaterialColor materialColor) {
public class BlockPropertiesImpl {
public static BlockProperties of(Material material, MaterialColor materialColor) {
return new Impl(material, (state) -> materialColor);
}
@Override
public BlockProperties of(Material material, Function<BlockState, MaterialColor> function) {
public static BlockProperties of(Material material, Function<BlockState, MaterialColor> function) {
return new Impl(material, function);
}
@Override
public BlockProperties copy(AbstractBlock abstractBlock) {
public static BlockProperties copy(AbstractBlock abstractBlock) {
return copy(abstractBlock.properties);
}
@Override
public BlockProperties copy(AbstractBlock.Properties old) {
public static BlockProperties copy(AbstractBlock.Properties old) {
BlockProperties properties = of(old.material, old.materialColor);
properties.material = old.material;
properties.destroyTime = old.destroyTime;

View File

@@ -17,7 +17,6 @@
package me.shedaniel.architectury.registry.forge;
import com.google.common.collect.Lists;
import me.shedaniel.architectury.registry.ColorHandlers;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.color.IBlockColor;
@@ -29,11 +28,11 @@ import org.apache.commons.lang3.tuple.Pair;
import java.util.List;
public class ColorHandlersImpl implements ColorHandlers.Impl {
public class ColorHandlersImpl {
private static final List<Pair<IItemColor, IItemProvider[]>> ITEM_COLORS = Lists.newArrayList();
private static final List<Pair<IBlockColor, Block[]>> BLOCK_COLORS = Lists.newArrayList();
public ColorHandlersImpl() {
static {
MinecraftForge.EVENT_BUS.<ColorHandlerEvent.Item>addListener(event -> {
for (Pair<IItemColor, IItemProvider[]> pair : ITEM_COLORS) {
event.getItemColors().register(pair.getLeft(), pair.getRight());
@@ -46,8 +45,7 @@ public class ColorHandlersImpl implements ColorHandlers.Impl {
});
}
@Override
public void registerItemColors(IItemColor itemColor, IItemProvider... items) {
public static void registerItemColors(IItemColor itemColor, IItemProvider... items) {
if (Minecraft.getInstance().getItemColors() == null) {
ITEM_COLORS.add(Pair.of(itemColor, items));
} else {
@@ -55,8 +53,7 @@ public class ColorHandlersImpl implements ColorHandlers.Impl {
}
}
@Override
public void registerBlockColors(IBlockColor blockColor, Block... blocks) {
public static void registerBlockColors(IBlockColor blockColor, Block... blocks) {
if (Minecraft.getInstance().getBlockColors() == null) {
BLOCK_COLORS.add(Pair.of(blockColor, blocks));
} else {

View File

@@ -16,7 +16,6 @@
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;
@@ -24,9 +23,8 @@ 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) {
public class CreativeTabsImpl {
public static ItemGroup create(ResourceLocation resourceLocation, Supplier<ItemStack> supplier) {
return new ItemGroup(String.format("%s.%s", resourceLocation.getNamespace(), resourceLocation.getPath())) {
@Override
@Nonnull

View File

@@ -16,13 +16,11 @@
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) {
public class KeyBindingsImpl {
public static void registerKeyBinding(KeyBinding keyBinding) {
ClientRegistry.registerKeyBinding(keyBinding);
}
}

View File

@@ -40,21 +40,18 @@ import java.util.Optional;
import java.util.Set;
import java.util.function.Supplier;
public class RegistriesImpl implements Registries.Impl {
@Override
public Registries.RegistryProvider get(String modId) {
public class RegistriesImpl {
public static Registries.RegistryProvider _get(String modId) {
return new RegistryProviderImpl(modId);
}
@Override
public <T> ResourceLocation getId(T t, RegistryKey<net.minecraft.util.registry.Registry<T>> registryKey) {
public static <T> ResourceLocation getId(T t, RegistryKey<net.minecraft.util.registry.Registry<T>> registryKey) {
if (t instanceof IForgeRegistryEntry)
return ((IForgeRegistryEntry<?>) t).getRegistryName();
return null;
}
@Override
public <T> ResourceLocation getId(T t, net.minecraft.util.registry.Registry<T> registry) {
public static <T> ResourceLocation getId(T t, net.minecraft.util.registry.Registry<T> registry) {
if (t instanceof IForgeRegistryEntry)
return ((IForgeRegistryEntry<?>) t).getRegistryName();
return null;

View File

@@ -17,7 +17,6 @@
package me.shedaniel.architectury.registry.forge;
import com.google.common.collect.Lists;
import me.shedaniel.architectury.registry.ReloadListeners;
import net.minecraft.client.Minecraft;
import net.minecraft.resources.IFutureReloadListener;
import net.minecraft.resources.IReloadableResourceManager;
@@ -29,10 +28,10 @@ import net.minecraftforge.event.AddReloadListenerEvent;
import java.util.List;
public class ReloadListenersImpl implements ReloadListeners.Impl {
private List<IFutureReloadListener> serverDataReloadListeners = Lists.newArrayList();
public class ReloadListenersImpl {
private static List<IFutureReloadListener> serverDataReloadListeners = Lists.newArrayList();
public ReloadListenersImpl() {
static {
MinecraftForge.EVENT_BUS.<AddReloadListenerEvent>addListener(event -> {
for (IFutureReloadListener listener : serverDataReloadListeners) {
event.addListener(listener);
@@ -40,8 +39,7 @@ public class ReloadListenersImpl implements ReloadListeners.Impl {
});
}
@Override
public void registerReloadListener(ResourcePackType type, IFutureReloadListener listener) {
public static void registerReloadListener(ResourcePackType type, IFutureReloadListener listener) {
if (type == ResourcePackType.SERVER_DATA) {
serverDataReloadListeners.add(listener);
} else if (type == ResourcePackType.CLIENT_RESOURCES) {
@@ -50,7 +48,7 @@ public class ReloadListenersImpl implements ReloadListeners.Impl {
}
@OnlyIn(Dist.CLIENT)
private void reloadClientReloadListener(IFutureReloadListener listener) {
private static void reloadClientReloadListener(IFutureReloadListener listener) {
((IReloadableResourceManager) Minecraft.getInstance().getResourceManager()).registerReloadListener(listener);
}
}

View File

@@ -16,22 +16,19 @@
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) {
public class RenderTypesImpl {
public static void register(RenderType type, Block... blocks) {
for (Block block : blocks) {
RenderTypeLookup.setRenderLayer(block, type);
}
}
@Override
public void register(RenderType type, Fluid... fluids) {
public static void register(RenderType type, Fluid... fluids) {
for (Fluid fluid : fluids) {
RenderTypeLookup.setRenderLayer(fluid, type);
}

View File

@@ -17,28 +17,23 @@
package me.shedaniel.architectury.registry.forge;
import me.shedaniel.architectury.registry.ToolType;
import net.minecraft.item.Item;
import net.minecraft.tags.ITag;
public class ToolTypeImpl implements ToolType.Impl {
@Override
public ITag<Item> pickaxeTag() {
public class ToolTypeImpl {
public static ITag<Item> pickaxeTag() {
return null;
}
@Override
public ITag<Item> axeTag() {
public static ITag<Item> axeTag() {
return null;
}
@Override
public ITag<Item> hoeTag() {
public static ITag<Item> hoeTag() {
return null;
}
@Override
public ITag<Item> shovelTag() {
public static ITag<Item> shovelTag() {
return null;
}
}

View File

@@ -16,13 +16,11 @@
package me.shedaniel.architectury.utils.forge;
import me.shedaniel.architectury.utils.GameInstance;
import net.minecraft.server.MinecraftServer;
import net.minecraftforge.fml.server.ServerLifecycleHooks;
public class GameInstanceImpl implements GameInstance.Impl {
@Override
public MinecraftServer getServer() {
public class GameInstanceImpl {
public static MinecraftServer getServer() {
return ServerLifecycleHooks.getCurrentServer();
}
}

View File

@@ -0,0 +1,6 @@
{
"pack": {
"description": "Architectury",
"pack_format": 6
}
}