Forge 1.18 Support

This commit is contained in:
shedaniel
2021-12-02 01:11:27 +08:00
parent 286158ad7b
commit eeaaf273c6
26 changed files with 115 additions and 321 deletions

View File

@@ -19,6 +19,7 @@
package dev.architectury.event.forge;
import com.mojang.blaze3d.vertex.PoseStack;
import dev.architectury.event.CompoundEventResult;
import dev.architectury.event.events.client.ClientChatEvent;
import dev.architectury.event.events.client.*;
@@ -77,15 +78,15 @@ public class EventHandlerImplClient {
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.InitGuiEvent.Pre event) {
if (ClientGuiEvent.INIT_PRE.invoker().init(event.getGui(), new ScreenAccessImpl(event.getGui())).isFalse()) {
public static void event(ScreenEvent.InitScreenEvent.Pre event) {
if (ClientGuiEvent.INIT_PRE.invoker().init(event.getScreen(), new ScreenAccessImpl(event.getScreen())).isFalse()) {
event.setCanceled(true);
}
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.InitGuiEvent.Post event) {
ClientGuiEvent.INIT_POST.invoker().init(event.getGui(), new ScreenAccessImpl(event.getGui()));
public static void event(ScreenEvent.InitScreenEvent.Post event) {
ClientGuiEvent.INIT_POST.invoker().init(event.getScreen(), new ScreenAccessImpl(event.getScreen()));
}
@SubscribeEvent(priority = EventPriority.HIGH)
@@ -127,26 +128,26 @@ public class EventHandlerImplClient {
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiOpenEvent event) {
CompoundEventResult<Screen> result = ClientGuiEvent.SET_SCREEN.invoker().modifyScreen(event.getGui());
public static void event(ScreenOpenEvent event) {
CompoundEventResult<Screen> result = ClientGuiEvent.SET_SCREEN.invoker().modifyScreen(event.getScreen());
if (result.isPresent()) {
if (result.isFalse())
event.setCanceled(true);
else if (result.object() != null)
event.setGui(result.object());
event.setScreen(result.object());
}
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.DrawScreenEvent.Pre event) {
if (ClientGuiEvent.RENDER_PRE.invoker().render(event.getGui(), event.getMatrixStack(), event.getMouseX(), event.getMouseY(), event.getRenderPartialTicks()).isFalse()) {
public static void event(ScreenEvent.DrawScreenEvent.Pre event) {
if (ClientGuiEvent.RENDER_PRE.invoker().render(event.getScreen(), event.getPoseStack(), event.getMouseX(), event.getMouseY(), event.getPartialTicks()).isFalse()) {
event.setCanceled(true);
}
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.DrawScreenEvent.Post event) {
ClientGuiEvent.RENDER_POST.invoker().render(event.getGui(), event.getMatrixStack(), event.getMouseX(), event.getMouseY(), event.getRenderPartialTicks());
public static void event(ScreenEvent.DrawScreenEvent.Post event) {
ClientGuiEvent.RENDER_POST.invoker().render(event.getScreen(), event.getPoseStack(), event.getMouseX(), event.getMouseY(), event.getPartialTicks());
}
@SubscribeEvent(priority = EventPriority.HIGH)
@@ -169,113 +170,119 @@ public class EventHandlerImplClient {
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(RenderTooltipEvent.Pre event) {
if (ClientTooltipEvent.RENDER_FORGE_PRE.invoker().renderTooltip(event.getMatrixStack(), event.getLines(), event.getX(), event.getY()).isFalse()) {
// TODO: https://discord.com/channels/313125603924639766/852298000042164244/915646384437350472
PoseStack stack = new PoseStack();
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(event.getMatrixStack(), positionContext);
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) {
// TODO: https://discord.com/channels/313125603924639766/852298000042164244/915646384437350472
PoseStack stack = new PoseStack();
TooltipEventColorContextImpl colorContext = tooltipColorContext.get();
colorContext.reset();
colorContext.setBackgroundColor(event.getBackground());
colorContext.setBackgroundColor(event.getBackgroundStart());
colorContext.setOutlineGradientTopColor(event.getBorderStart());
colorContext.setOutlineGradientBottomColor(event.getBorderEnd());
ClientTooltipEvent.RENDER_MODIFY_COLOR.invoker().renderTooltip(event.getMatrixStack(), event.getX(), event.getY(), colorContext);
ClientTooltipEvent.RENDER_MODIFY_COLOR.invoker().renderTooltip(stack, event.getX(), event.getY(), colorContext);
event.setBackground(colorContext.getBackgroundColor());
event.setBorderEnd(colorContext.getOutlineGradientBottomColor());
event.setBorderStart(colorContext.getOutlineGradientTopColor());
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.MouseScrollEvent.Pre event) {
if (ClientScreenInputEvent.MOUSE_SCROLLED_PRE.invoker().mouseScrolled(Minecraft.getInstance(), event.getGui(), event.getMouseX(), event.getMouseY(), event.getScrollDelta()).isFalse()) {
public static void event(ScreenEvent.MouseScrollEvent.Pre event) {
if (ClientScreenInputEvent.MOUSE_SCROLLED_PRE.invoker().mouseScrolled(Minecraft.getInstance(), event.getScreen(), event.getMouseX(), event.getMouseY(), event.getScrollDelta()).isFalse()) {
event.setCanceled(true);
}
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.MouseScrollEvent.Post event) {
ClientScreenInputEvent.MOUSE_SCROLLED_POST.invoker().mouseScrolled(Minecraft.getInstance(), event.getGui(), event.getMouseX(), event.getMouseY(), event.getScrollDelta());
public static void event(ScreenEvent.MouseScrollEvent.Post event) {
ClientScreenInputEvent.MOUSE_SCROLLED_POST.invoker().mouseScrolled(Minecraft.getInstance(), event.getScreen(), event.getMouseX(), event.getMouseY(), event.getScrollDelta());
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.MouseClickedEvent.Pre event) {
if (ClientScreenInputEvent.MOUSE_CLICKED_PRE.invoker().mouseClicked(Minecraft.getInstance(), event.getGui(), event.getMouseX(), event.getMouseY(), event.getButton()).isFalse()) {
public static void event(ScreenEvent.MouseClickedEvent.Pre event) {
if (ClientScreenInputEvent.MOUSE_CLICKED_PRE.invoker().mouseClicked(Minecraft.getInstance(), event.getScreen(), event.getMouseX(), event.getMouseY(), event.getButton()).isFalse()) {
event.setCanceled(true);
}
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.MouseClickedEvent.Post event) {
ClientScreenInputEvent.MOUSE_CLICKED_POST.invoker().mouseClicked(Minecraft.getInstance(), event.getGui(), event.getMouseX(), event.getMouseY(), event.getButton());
public static void event(ScreenEvent.MouseClickedEvent.Post event) {
ClientScreenInputEvent.MOUSE_CLICKED_POST.invoker().mouseClicked(Minecraft.getInstance(), event.getScreen(), event.getMouseX(), event.getMouseY(), event.getButton());
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.MouseDragEvent.Pre event) {
if (ClientScreenInputEvent.MOUSE_DRAGGED_PRE.invoker().mouseDragged(Minecraft.getInstance(), event.getGui(), event.getMouseX(), event.getMouseY(), event.getMouseButton(), event.getDragX(), event.getDragY()).isFalse()) {
public static void event(ScreenEvent.MouseDragEvent.Pre event) {
if (ClientScreenInputEvent.MOUSE_DRAGGED_PRE.invoker().mouseDragged(Minecraft.getInstance(), event.getScreen(), event.getMouseX(), event.getMouseY(), event.getMouseButton(), event.getDragX(), event.getDragY()).isFalse()) {
event.setCanceled(true);
}
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.MouseDragEvent.Post event) {
ClientScreenInputEvent.MOUSE_DRAGGED_POST.invoker().mouseDragged(Minecraft.getInstance(), event.getGui(), event.getMouseX(), event.getMouseY(), event.getMouseButton(), event.getDragX(), event.getDragY());
public static void event(ScreenEvent.MouseDragEvent.Post event) {
ClientScreenInputEvent.MOUSE_DRAGGED_POST.invoker().mouseDragged(Minecraft.getInstance(), event.getScreen(), event.getMouseX(), event.getMouseY(), event.getMouseButton(), event.getDragX(), event.getDragY());
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.MouseReleasedEvent.Pre event) {
if (ClientScreenInputEvent.MOUSE_RELEASED_PRE.invoker().mouseReleased(Minecraft.getInstance(), event.getGui(), event.getMouseX(), event.getMouseY(), event.getButton()).isFalse()) {
public static void event(ScreenEvent.MouseReleasedEvent.Pre event) {
if (ClientScreenInputEvent.MOUSE_RELEASED_PRE.invoker().mouseReleased(Minecraft.getInstance(), event.getScreen(), event.getMouseX(), event.getMouseY(), event.getButton()).isFalse()) {
event.setCanceled(true);
}
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.MouseReleasedEvent.Post event) {
ClientScreenInputEvent.MOUSE_RELEASED_PRE.invoker().mouseReleased(Minecraft.getInstance(), event.getGui(), event.getMouseX(), event.getMouseY(), event.getButton());
public static void event(ScreenEvent.MouseReleasedEvent.Post event) {
ClientScreenInputEvent.MOUSE_RELEASED_PRE.invoker().mouseReleased(Minecraft.getInstance(), event.getScreen(), event.getMouseX(), event.getMouseY(), event.getButton());
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.KeyboardCharTypedEvent.Pre event) {
if (ClientScreenInputEvent.CHAR_TYPED_PRE.invoker().charTyped(Minecraft.getInstance(), event.getGui(), event.getCodePoint(), event.getModifiers()).isFalse()) {
public static void event(ScreenEvent.KeyboardCharTypedEvent.Pre event) {
if (ClientScreenInputEvent.CHAR_TYPED_PRE.invoker().charTyped(Minecraft.getInstance(), event.getScreen(), event.getCodePoint(), event.getModifiers()).isFalse()) {
event.setCanceled(true);
}
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.KeyboardCharTypedEvent.Post event) {
ClientScreenInputEvent.CHAR_TYPED_POST.invoker().charTyped(Minecraft.getInstance(), event.getGui(), event.getCodePoint(), event.getModifiers());
public static void event(ScreenEvent.KeyboardCharTypedEvent.Post event) {
ClientScreenInputEvent.CHAR_TYPED_POST.invoker().charTyped(Minecraft.getInstance(), event.getScreen(), event.getCodePoint(), event.getModifiers());
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.KeyboardKeyPressedEvent.Pre event) {
if (ClientScreenInputEvent.KEY_PRESSED_PRE.invoker().keyPressed(Minecraft.getInstance(), event.getGui(), event.getKeyCode(), event.getScanCode(), event.getModifiers()).isFalse()) {
public static void event(ScreenEvent.KeyboardKeyPressedEvent.Pre event) {
if (ClientScreenInputEvent.KEY_PRESSED_PRE.invoker().keyPressed(Minecraft.getInstance(), event.getScreen(), event.getKeyCode(), event.getScanCode(), event.getModifiers()).isFalse()) {
event.setCanceled(true);
}
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.KeyboardKeyPressedEvent.Post event) {
ClientScreenInputEvent.KEY_PRESSED_POST.invoker().keyPressed(Minecraft.getInstance(), event.getGui(), event.getKeyCode(), event.getScanCode(), event.getModifiers());
public static void event(ScreenEvent.KeyboardKeyPressedEvent.Post event) {
ClientScreenInputEvent.KEY_PRESSED_POST.invoker().keyPressed(Minecraft.getInstance(), event.getScreen(), event.getKeyCode(), event.getScanCode(), event.getModifiers());
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.KeyboardKeyReleasedEvent.Pre event) {
if (ClientScreenInputEvent.KEY_RELEASED_PRE.invoker().keyReleased(Minecraft.getInstance(), event.getGui(), event.getKeyCode(), event.getScanCode(), event.getModifiers()).isFalse()) {
public static void event(ScreenEvent.KeyboardKeyReleasedEvent.Pre event) {
if (ClientScreenInputEvent.KEY_RELEASED_PRE.invoker().keyReleased(Minecraft.getInstance(), event.getScreen(), event.getKeyCode(), event.getScanCode(), event.getModifiers()).isFalse()) {
event.setCanceled(true);
}
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(GuiScreenEvent.KeyboardKeyReleasedEvent.Post event) {
ClientScreenInputEvent.KEY_RELEASED_POST.invoker().keyReleased(Minecraft.getInstance(), event.getGui(), event.getKeyCode(), event.getScanCode(), event.getModifiers());
public static void event(ScreenEvent.KeyboardKeyReleasedEvent.Post event) {
ClientScreenInputEvent.KEY_RELEASED_POST.invoker().keyReleased(Minecraft.getInstance(), event.getScreen(), event.getKeyCode(), event.getScanCode(), event.getModifiers());
}
@SubscribeEvent(priority = EventPriority.HIGH)
@@ -287,14 +294,14 @@ public class EventHandlerImplClient {
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(InputEvent.RawMouseEvent event) {
if (ClientRawInputEvent.MOUSE_CLICKED_PRE.invoker().mouseClicked(Minecraft.getInstance(), event.getButton(), event.getAction(), event.getMods()).isFalse()) {
if (ClientRawInputEvent.MOUSE_CLICKED_PRE.invoker().mouseClicked(Minecraft.getInstance(), event.getButton(), event.getAction(), event.getModifiers()).isFalse()) {
event.setCanceled(true);
}
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(InputEvent.MouseInputEvent event) {
ClientRawInputEvent.MOUSE_CLICKED_POST.invoker().mouseClicked(Minecraft.getInstance(), event.getButton(), event.getAction(), event.getMods());
ClientRawInputEvent.MOUSE_CLICKED_POST.invoker().mouseClicked(Minecraft.getInstance(), event.getButton(), event.getAction(), event.getModifiers());
}
@SubscribeEvent(priority = EventPriority.HIGH)
@@ -306,12 +313,12 @@ public class EventHandlerImplClient {
public static class ModBasedEventHandler {
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(TextureStitchEvent.Pre event) {
ClientTextureStitchEvent.PRE.invoker().stitch(event.getMap(), event::addSprite);
ClientTextureStitchEvent.PRE.invoker().stitch(event.getAtlas(), event::addSprite);
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(TextureStitchEvent.Post event) {
ClientTextureStitchEvent.POST.invoker().stitch(event.getMap());
ClientTextureStitchEvent.POST.invoker().stitch(event.getAtlas());
}
@SubscribeEvent(priority = EventPriority.HIGH)

View File

@@ -47,6 +47,7 @@ import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.entity.living.LivingSpawnEvent;
import net.minecraftforge.event.entity.player.*;
import net.minecraftforge.event.entity.player.PlayerEvent.*;
import net.minecraftforge.event.server.*;
import net.minecraftforge.event.world.BlockEvent.BreakEvent;
import net.minecraftforge.event.world.BlockEvent.EntityPlaceEvent;
import net.minecraftforge.event.world.BlockEvent.FarmlandTrampleEvent;
@@ -58,8 +59,7 @@ import net.minecraftforge.eventbus.api.Event;
import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.LogicalSide;
import net.minecraftforge.fmllegacy.server.ServerLifecycleHooks;
import net.minecraftforge.fmlserverevents.*;
import net.minecraftforge.server.ServerLifecycleHooks;
public class EventHandlerImplCommon {
@SubscribeEvent(priority = EventPriority.HIGH)
@@ -81,22 +81,22 @@ public class EventHandlerImplCommon {
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(FMLServerStartingEvent event) {
public static void event(ServerStartingEvent event) {
LifecycleEvent.SERVER_STARTING.invoker().stateChanged(event.getServer());
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(FMLServerStartedEvent event) {
public static void event(ServerStartedEvent event) {
LifecycleEvent.SERVER_STARTED.invoker().stateChanged(event.getServer());
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(FMLServerStoppingEvent event) {
public static void event(ServerStoppingEvent event) {
LifecycleEvent.SERVER_STOPPING.invoker().stateChanged(event.getServer());
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(FMLServerStoppedEvent event) {
public static void event(ServerStoppedEvent event) {
LifecycleEvent.SERVER_STOPPED.invoker().stateChanged(event.getServer());
}
@@ -389,7 +389,7 @@ public class EventHandlerImplCommon {
}
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(FMLServerAboutToStartEvent event) {
public static void event(ServerAboutToStartEvent event) {
LifecycleEvent.SERVER_BEFORE_START.invoker().stateChanged(event.getServer());
}
@@ -410,7 +410,7 @@ public class EventHandlerImplCommon {
@SubscribeEvent(priority = EventPriority.HIGH)
public static void event(ChunkDataEvent.Load event) {
LevelAccessor level = event.getChunk().getWorldForge();
if (!(level instanceof ServerLevel)) {
if (!(level instanceof ServerLevel) && event instanceof WorldEventAttachment) {
level = ((WorldEventAttachment) event).architectury$getAttachedLevel();
}
ChunkEvent.LOAD_DATA.invoker().load(event.getChunk(), level instanceof ServerLevel ? (ServerLevel) level : null, event.getData());

View File

@@ -20,17 +20,9 @@
package dev.architectury.hooks.level.entity.forge;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.EntityCollisionContext;
import org.jetbrains.annotations.Nullable;
public class EntityHooksImpl {
public static String getEncodeId(Entity entity) {
return entity.getEncodeId();
}
@Nullable
public static Entity fromCollision(CollisionContext ctx) {
return ctx instanceof EntityCollisionContext ? ((EntityCollisionContext) ctx).getEntity().orElse(null) : null;
}
}

View File

@@ -1,52 +0,0 @@
/*
* This file is part of architectury.
* Copyright (C) 2020, 2021 architectury
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package dev.architectury.mixin.forge;
import dev.architectury.extensions.BlockEntityExtension;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
import net.minecraft.world.level.block.entity.BlockEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(BlockEntity.class)
public abstract class MixinBlockEntity {
@Inject(method = "getUpdatePacket", at = @At("HEAD"), cancellable = true)
public void getUpdatePacket(CallbackInfoReturnable<ClientboundBlockEntityDataPacket> cir) {
if (this instanceof BlockEntityExtension) {
BlockEntityExtension entity = (BlockEntityExtension) this;
BlockEntity be = (BlockEntity) entity;
cir.setReturnValue(new ClientboundBlockEntityDataPacket(be.getBlockPos(), 10, be.getUpdateTag()));
cir.cancel();
}
}
@Inject(method = "getUpdateTag", at = @At("HEAD"), cancellable = true)
public void getUpdateTag(CallbackInfoReturnable<CompoundTag> cir) {
if (this instanceof BlockEntityExtension) {
BlockEntityExtension entity = (BlockEntityExtension) this;
BlockEntity be = (BlockEntity) entity;
cir.setReturnValue(entity.saveClientData(new CompoundTag()));
cir.cancel();
}
}
}

View File

@@ -1,44 +0,0 @@
/*
* This file is part of architectury.
* Copyright (C) 2020, 2021 architectury
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package dev.architectury.mixin.forge;
import dev.architectury.extensions.BlockEntityExtension;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.Connection;
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraftforge.common.extensions.IForgeBlockEntity;
import org.spongepowered.asm.mixin.Mixin;
@Mixin(BlockEntityExtension.class)
public interface MixinBlockEntityExtension extends IForgeBlockEntity {
@Override
default void handleUpdateTag(CompoundTag tag) {
var entity = (BlockEntity) this;
if (entity.hasLevel()) {
((BlockEntityExtension) this).loadClientData(entity.getBlockState(), tag);
}
}
@Override
default void onDataPacket(Connection connection, ClientboundBlockEntityDataPacket packet) {
handleUpdateTag(packet.getTag());
}
}

View File

@@ -28,7 +28,7 @@ import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.event.ClientPlayerNetworkEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fmllegacy.network.NetworkEvent;
import net.minecraftforge.network.NetworkEvent;
import java.util.Collections;
import java.util.Set;

View File

@@ -41,11 +41,11 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.LogicalSide;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fmllegacy.network.NetworkDirection;
import net.minecraftforge.fmllegacy.network.NetworkEvent;
import net.minecraftforge.fmllegacy.network.NetworkHooks;
import net.minecraftforge.fmllegacy.network.NetworkRegistry;
import net.minecraftforge.fmllegacy.network.event.EventNetworkChannel;
import net.minecraftforge.network.NetworkDirection;
import net.minecraftforge.network.NetworkEvent;
import net.minecraftforge.network.NetworkHooks;
import net.minecraftforge.network.NetworkRegistry;
import net.minecraftforge.network.event.EventNetworkChannel;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

View File

@@ -22,13 +22,13 @@ package dev.architectury.platform.forge;
import dev.architectury.platform.Mod;
import dev.architectury.utils.Env;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.ConfigGuiHandler;
import net.minecraftforge.fml.ModContainer;
import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.loading.FMLEnvironment;
import net.minecraftforge.fml.loading.FMLLoader;
import net.minecraftforge.fml.loading.FMLPaths;
import net.minecraftforge.fml.loading.moddiscovery.ModFileInfo;
import net.minecraftforge.fmlclient.ConfigGuiHandler;
import net.minecraftforge.forgespi.language.IModFileInfo;
import net.minecraftforge.forgespi.language.IModInfo;
import org.jetbrains.annotations.NotNull;

View File

@@ -20,7 +20,7 @@
package dev.architectury.registry.client.keymappings.forge;
import net.minecraft.client.KeyMapping;
import net.minecraftforge.fmlclient.registry.ClientRegistry;
import net.minecraftforge.client.ClientRegistry;
public class KeyMappingRegistryImpl {
public static void register(KeyMapping keyBinding) {

View File

@@ -30,11 +30,9 @@ import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.MobSpawnSettings;
import net.minecraft.world.level.levelgen.GenerationStep;
import net.minecraft.world.level.levelgen.carver.ConfiguredWorldCarver;
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature;
import net.minecraft.world.level.levelgen.surfacebuilders.ConfiguredSurfaceBuilder;
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
import net.minecraftforge.common.world.BiomeGenerationSettingsBuilder;
import net.minecraftforge.common.world.MobSpawnInfoBuilder;
import net.minecraftforge.common.world.MobSpawnSettingsBuilder;
import net.minecraftforge.event.world.BiomeLoadingEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
@@ -43,7 +41,6 @@ import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.function.BiPredicate;
import java.util.function.Predicate;
@@ -139,17 +136,6 @@ public class BiomeModificationsImpl {
public Biome.@NotNull BiomeCategory getCategory() {
return event.getCategory();
}
@Override
public float getDepth() {
return event.getDepth();
}
@Override
public float getScale() {
return event.getScale();
}
}
private static class GenerationSettingsBuilderWrapped implements GenerationProperties {
@@ -159,32 +145,21 @@ public class BiomeModificationsImpl {
this.generation = generation;
}
@Override
public @NotNull Optional<Supplier<ConfiguredSurfaceBuilder<?>>> getSurfaceBuilder() {
return generation.getSurfaceBuilder();
}
@Override
public @NotNull List<Supplier<ConfiguredWorldCarver<?>>> getCarvers(GenerationStep.Carving carving) {
return generation.getCarvers(carving);
}
@Override
public @NotNull List<List<Supplier<ConfiguredFeature<?, ?>>>> getFeatures() {
public @NotNull List<List<Supplier<PlacedFeature>>> getFeatures() {
return generation.features;
}
@Override
public @NotNull List<Supplier<ConfiguredStructureFeature<?, ?>>> getStructureStarts() {
return generation.getStructures();
}
}
private static class SpawnSettingsBuilderWrapped implements SpawnProperties {
protected final MobSpawnInfoBuilder builder;
protected final MobSpawnSettingsBuilder builder;
public SpawnSettingsBuilderWrapped(MobSpawnInfoBuilder builder) {
public SpawnSettingsBuilderWrapped(MobSpawnSettingsBuilder builder) {
this.builder = builder;
}
@@ -202,11 +177,6 @@ public class BiomeModificationsImpl {
public @NotNull Map<EntityType<?>, MobSpawnSettings.MobSpawnCost> getMobSpawnCosts() {
return builder.mobSpawnCosts;
}
@Override
public boolean isPlayerSpawnFriendly() {
return builder.playerCanSpawn;
}
}
public static class MutableBiomeWrapped extends BiomeWrapped implements BiomeProperties.Mutable {
@@ -244,18 +214,6 @@ public class BiomeModificationsImpl {
event.setCategory(category);
return this;
}
@Override
public @NotNull Mutable setDepth(float depth) {
event.setDepth(depth);
return this;
}
@Override
public @NotNull Mutable setScale(float scale) {
event.setScale(scale);
return this;
}
}
public static class MutableClimatePropertiesWrapped implements ClimateProperties.Mutable {
@@ -338,13 +296,7 @@ public class BiomeModificationsImpl {
}
@Override
public Mutable setSurfaceBuilder(ConfiguredSurfaceBuilder<?> builder) {
generation.surfaceBuilder(builder);
return this;
}
@Override
public Mutable addFeature(GenerationStep.Decoration decoration, ConfiguredFeature<?, ?> feature) {
public Mutable addFeature(GenerationStep.Decoration decoration, PlacedFeature feature) {
generation.addFeature(decoration, feature);
return this;
}
@@ -356,13 +308,7 @@ public class BiomeModificationsImpl {
}
@Override
public Mutable addStructure(ConfiguredStructureFeature<?, ?> feature) {
generation.addStructureStart(feature);
return this;
}
@Override
public Mutable removeFeature(GenerationStep.Decoration decoration, ConfiguredFeature<?, ?> feature) {
public Mutable removeFeature(GenerationStep.Decoration decoration, PlacedFeature feature) {
generation.getFeatures(decoration).removeIf(supplier -> supplier.get() == feature);
return this;
}
@@ -372,16 +318,10 @@ public class BiomeModificationsImpl {
generation.getCarvers(carving).removeIf(supplier -> supplier.get() == feature);
return this;
}
@Override
public Mutable removeStructure(ConfiguredStructureFeature<?, ?> feature) {
generation.getStructures().removeIf(supplier -> supplier.get() == feature);
return this;
}
}
private static class MutableSpawnSettingsBuilderWrapped extends SpawnSettingsBuilderWrapped implements SpawnProperties.Mutable {
public MutableSpawnSettingsBuilderWrapped(MobSpawnInfoBuilder builder) {
public MutableSpawnSettingsBuilderWrapped(MobSpawnSettingsBuilder builder) {
super(builder);
}
@@ -425,12 +365,6 @@ public class BiomeModificationsImpl {
getMobSpawnCosts().remove(entityType);
return this;
}
@Override
public @NotNull Mutable setPlayerSpawnFriendly(boolean friendly) {
builder.playerCanSpawn = friendly;
return this;
}
}
@SubscribeEvent

View File

@@ -31,8 +31,8 @@ import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.MenuType;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.extensions.IForgeContainerType;
import net.minecraftforge.fmllegacy.network.NetworkHooks;
import net.minecraftforge.common.extensions.IForgeMenuType;
import net.minecraftforge.network.NetworkHooks;
public class MenuRegistryImpl {
public static void openExtendedMenu(ServerPlayer player, ExtendedMenuProvider provider) {
@@ -44,7 +44,7 @@ public class MenuRegistryImpl {
}
public static <T extends AbstractContainerMenu> MenuType<T> ofExtended(ExtendedMenuTypeFactory<T> factory) {
return IForgeContainerType.create(factory::create);
return IForgeMenuType.create(factory::create);
}
@OnlyIn(Dist.CLIENT)

View File

@@ -38,11 +38,7 @@ import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fmllegacy.RegistryObject;
import net.minecraftforge.registries.ForgeRegistry;
import net.minecraftforge.registries.IForgeRegistry;
import net.minecraftforge.registries.IForgeRegistryEntry;
import net.minecraftforge.registries.RegistryManager;
import net.minecraftforge.registries.*;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable;

View File

@@ -20,7 +20,7 @@
package dev.architectury.utils.forge;
import net.minecraft.server.MinecraftServer;
import net.minecraftforge.fmllegacy.server.ServerLifecycleHooks;
import net.minecraftforge.server.ServerLifecycleHooks;
public class GameInstanceImpl {
public static MinecraftServer getServer() {