More events and hooks

This commit is contained in:
shedaniel
2020-11-07 14:51:39 +08:00
parent d50135b5d9
commit 1d7e7adff1
22 changed files with 503 additions and 55 deletions

View File

@@ -16,7 +16,7 @@
package me.shedaniel.architectury.event.forge;
import me.shedaniel.architectury.event.EventFactory;
import me.shedaniel.architectury.event.EventHandler;
import me.shedaniel.architectury.event.events.*;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.IGuiEventListener;
@@ -35,10 +35,14 @@ import net.minecraftforge.event.RegisterCommandsEvent;
import net.minecraftforge.event.ServerChatEvent;
import net.minecraftforge.event.TickEvent.*;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.entity.player.AdvancementEvent;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.event.entity.player.PlayerEvent.Clone;
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.event.world.ExplosionEvent.Detonate;
import net.minecraftforge.event.world.ExplosionEvent.Start;
import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.LogicalSide;
@@ -50,7 +54,7 @@ import net.minecraftforge.fml.server.ServerLifecycleHooks;
import java.util.List;
public class EventFactoryImpl implements EventFactory.Impl {
public class EventHandlerImpl implements EventHandler.Impl {
@Override
public void registerClient() {
MinecraftForge.EVENT_BUS.register(Client.class);
@@ -145,6 +149,18 @@ public class EventFactoryImpl implements EventFactory.Impl {
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());
}
}
public static class Common {
@@ -242,6 +258,14 @@ public class EventFactoryImpl implements EventFactory.Impl {
}
}
@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) {
@@ -256,6 +280,32 @@ public class EventFactoryImpl implements EventFactory.Impl {
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());
}
}
@OnlyIn(Dist.DEDICATED_SERVER)

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package me.shedaniel.architectury.me.shedaniel.architectury.hooks.forge;
package me.shedaniel.architectury.hooks.forge;
import me.shedaniel.architectury.hooks.ScreenHooks;
import net.minecraft.client.gui.IGuiEventListener;

View File

@@ -34,7 +34,10 @@ import net.minecraftforge.registries.RegistryManager;
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.function.Supplier;
public class RegistriesImpl implements Registries.Impl {
@@ -119,12 +122,47 @@ public class RegistriesImpl implements Registries.Impl {
public ResourceLocation getId(T obj) {
return delegate.getKey(obj);
}
@Override
public Optional<RegistryKey<T>> getKey(T t) {
return delegate.getResourceKey(t);
}
@Override
@Nullable
public T get(ResourceLocation id) {
return delegate.get(id);
}
@Override
public boolean contains(ResourceLocation resourceLocation) {
return delegate.containsKey(resourceLocation);
}
@Override
public boolean containsValue(T t) {
return delegate.getResourceKey(t).isPresent();
}
@Override
public Set<ResourceLocation> getIds() {
return delegate.keySet();
}
@Override
public Set<Map.Entry<RegistryKey<T>, T>> entrySet() {
return delegate.entrySet();
}
@Override
public RegistryKey<? extends net.minecraft.util.registry.Registry<T>> key() {
return delegate.key();
}
@Override
public Iterator<T> iterator() {
return delegate.iterator();
}
}
public static class ForgeBackedRegistryImpl<T extends IForgeRegistryEntry<T>> implements Registry<T> {
@@ -154,11 +192,46 @@ public class RegistriesImpl implements Registries.Impl {
public ResourceLocation getId(T obj) {
return delegate.getKey(obj);
}
@Override
public Optional<RegistryKey<T>> getKey(T t) {
return Optional.ofNullable(getId(t)).map(id -> RegistryKey.create(key(), id));
}
@Override
@Nullable
public T get(ResourceLocation id) {
return delegate.getValue(id);
}
@Override
public boolean contains(ResourceLocation resourceLocation) {
return delegate.containsKey(resourceLocation);
}
@Override
public boolean containsValue(T t) {
return delegate.containsValue(t);
}
@Override
public Set<ResourceLocation> getIds() {
return delegate.getKeys();
}
@Override
public Set<Map.Entry<RegistryKey<T>, T>> entrySet() {
return delegate.getEntries();
}
@Override
public RegistryKey<? extends net.minecraft.util.registry.Registry<T>> key() {
return RegistryKey.createRegistryKey(delegate.getRegistryName());
}
@Override
public Iterator<T> iterator() {
return delegate.iterator();
}
}
}