Update preprocessor and replace 1.13.2 subproject with 1.14.4-forge

The new preprocessor version brings first-party support for fabric, in
particular for automatically fetching mappings loom and for
automatically remapping between MC versions via intermediary mappings.
This will come in handy when updating to 1.15.

It also supports automatic remapping between fabric and forge on the
same MC version (by going mcp<->srg<->mojang<->intermediary<->yarn).
Therefore this commit replaces the previous 1.13.2 (forge) subproject
with a 1.14.4-forge one. Instead of manually providing full mappings for
1.14.4-fabric to 1.13.2-forge and partial (classes) for 1.13.2-forge to
1.12.2-forge, we now only need partial (classes) for 1.12.2-forge to
1.14.4-forge and preprocessor will take care of the forge to fabric
step (in fact, our mapping file for that is currently completely empty).

In an attempt to write an IDE (IntelliJ) plugin for quicker and easier
working with the preprocessor (e.g. immediately mapping single files
from within the IDE, jumping between different versions for the same
file), the preprocessor gradle plugin declaration now requires you to
explicitly specify variables in the common.gradle and the overall
relationship between projects in the build.gradle (latter is required
anyway, so the plugin can know where it should map between forge and
fabric and which subprojects are which versions).
Since that necessitated some changes to the build.gradle file, I took
the opportunity to convert it to Kotlin. As such we now also use
Gradle's newer plugin-block with the pluginManagement-block instead of
manually declaring buildScript (not for the common.gradle though), which
imo is nicer anyway and comes with various advantages (see gradle docs).

There were also some remapping bugs fixed and some new ones
introduced (e.g. manually declared inner class mappings seem to no
longer function properly under certain conditions).
There's also support for remapping Kotlin now. Just saying.
This commit is contained in:
Jonas Herzig
2020-01-12 23:34:10 +01:00
parent f51298e2a3
commit 8bc0b0a4df
54 changed files with 932 additions and 631 deletions

View File

@@ -29,17 +29,48 @@ import net.minecraft.network.NetworkState;
import net.minecraft.network.ClientConnection;
import net.minecraft.network.Packet;
import net.minecraft.util.PacketByteBuf;
import net.minecraft.client.network.packet.ChatMessageS2CPacket;
import net.minecraft.client.network.packet.CustomPayloadS2CPacket;
import net.minecraft.client.network.packet.DisconnectS2CPacket;
import net.minecraft.client.network.packet.EntitiesDestroyS2CPacket;
import net.minecraft.client.network.packet.EntitySpawnGlobalS2CPacket;
import net.minecraft.client.network.packet.EntitySpawnS2CPacket;
import net.minecraft.client.network.packet.ExperienceBarUpdateS2CPacket;
import net.minecraft.client.network.packet.ExperienceOrbSpawnS2CPacket;
import net.minecraft.client.network.packet.GameJoinS2CPacket;
import net.minecraft.client.network.packet.GameStateChangeS2CPacket;
import net.minecraft.client.network.packet.GuiCloseS2CPacket;
import net.minecraft.client.network.packet.GuiOpenS2CPacket;
import net.minecraft.client.network.packet.GuiSlotUpdateS2CPacket;
import net.minecraft.client.network.packet.GuiUpdateS2CPacket;
import net.minecraft.client.network.packet.HealthUpdateS2CPacket;
import net.minecraft.client.network.packet.LoginSuccessS2CPacket;
import net.minecraft.client.network.packet.*;
import net.minecraft.client.network.packet.MobSpawnS2CPacket;
import net.minecraft.client.network.packet.PaintingSpawnS2CPacket;
import net.minecraft.client.network.packet.ParticleS2CPacket;
import net.minecraft.client.network.packet.PlayerAbilitiesS2CPacket;
import net.minecraft.client.network.packet.PlayerPositionLookS2CPacket;
import net.minecraft.client.network.packet.PlayerRespawnS2CPacket;
import net.minecraft.client.network.packet.PlayerSpawnS2CPacket;
import net.minecraft.client.network.packet.SignEditorOpenS2CPacket;
import net.minecraft.client.network.packet.StatisticsS2CPacket;
import net.minecraft.text.Text;
import net.minecraft.world.World;
import net.minecraft.world.chunk.ChunkProvider;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
//#if MC>=11400
//#if FABRIC>=1
import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback;
//#else
//$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
//$$ import net.minecraftforge.event.TickEvent;
//#endif
//#if MC>=11400
import net.minecraft.class_4463;
import net.minecraft.client.network.packet.OpenContainerPacket;
import net.minecraft.client.network.packet.OpenWrittenBookS2CPacket;
import net.minecraft.entity.EntityType;
import net.minecraft.text.TranslatableText;
//#else
@@ -49,8 +80,6 @@ import net.minecraft.text.TranslatableText;
//$$ import net.minecraft.world.EnumDifficulty;
//$$ import net.minecraft.world.WorldType;
//$$ import net.minecraft.world.chunk.Chunk;
//$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
//$$ import net.minecraftforge.fml.common.gameevent.TickEvent;
//$$ import java.util.ArrayList;
//$$ import java.util.Collection;
//$$ import java.util.Iterator;
@@ -65,6 +94,9 @@ import net.minecraft.util.Identifier;
//#if MC>=11200
import com.replaymod.core.utils.WrappedTimer;
import net.minecraft.client.network.packet.AdvancementUpdateS2CPacket;
import net.minecraft.client.network.packet.SelectAdvancementTabS2CPacket;
import net.minecraft.client.network.packet.SynchronizeRecipesS2CPacket;
//#endif
//#if MC>=11002
import net.minecraft.world.GameMode;
@@ -72,7 +104,16 @@ import net.minecraft.world.GameMode;
//$$ import net.minecraft.world.WorldSettings.GameType;
//#endif
//#if MC>=10904
import net.minecraft.client.network.packet.UnloadChunkS2CPacket;
//#else
//$$ import net.minecraft.network.play.server.S21PacketChunkData;
//#endif
//#if MC>=10800
import net.minecraft.client.network.packet.ResourcePackSendS2CPacket;
import net.minecraft.client.network.packet.SetCameraEntityS2CPacket;
import net.minecraft.client.network.packet.TitleS2CPacket;
import net.minecraft.network.NetworkSide;
//#else
//$$ import org.apache.commons.io.Charsets;
@@ -320,7 +361,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
//$$ public // All event handlers need to be public in 1.7.10
//#endif
class EventHandler extends EventRegistrations {
//#if MC>=11400
//#if FABRIC>=1
{ on(PreTickCallback.EVENT, this::onWorldTick); }
private void onWorldTick() {
//#else
@@ -387,7 +428,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
//$$ Iterator<Entity> iter = loadedEntityList(world).iterator();
//$$ while (iter.hasNext()) {
//$$ Entity entity = iter.next();
//$$ if (entity.removed) {
//$$ if (entity.isDead) {
//$$ int chunkX = entity.chunkCoordX;
//$$ int chunkY = entity.chunkCoordZ;
//$$
@@ -400,7 +441,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
//$$ if (entity.addedToChunk && world.getChunkProvider().chunkExists(chunkX, chunkY)) {
//#endif
//#endif
//$$ world.getChunk(chunkX, chunkY).removeEntity(entity);
//$$ world.getChunkFromChunkCoords(chunkX, chunkY).removeEntity(entity);
//$$ }
//$$
//$$ iter.remove();
@@ -592,7 +633,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
p = new PlayerRespawnS2CPacket(respawn.getDimension(), respawn.getGeneratorType(), GameMode.SPECTATOR);
//#else
//#if MC>=10809
//$$ p = new SPacketRespawn(respawn.func_212643_b(),
//$$ p = new SPacketRespawn(respawn.getDimensionID(),
//$$ respawn.getDifficulty(), respawn.getWorldType(), GameType.SPECTATOR);
//#else
//$$ p = new S07PacketRespawn(respawn.func_149082_c(),
@@ -622,14 +663,21 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
CameraEntity cent = replayHandler.getCameraEntity();
//#if MC>=10800
//#if MC>=10904
//#if MC>=11400
for (PlayerPositionLookS2CPacket.Flag relative : ppl.getFlags()) {
//#else
//$$ for (Object relative : ppl.func_179834_f()) {
//#endif
if (relative == PlayerPositionLookS2CPacket.Flag.X
|| relative == PlayerPositionLookS2CPacket.Flag.Y
|| relative == PlayerPositionLookS2CPacket.Flag.Z) {
//#else
//#if MC>=10904
//$$ for (SPacketPlayerPosLook.EnumFlags relative : ppl.getFlags()) {
//#else
//$$ for (Object relative : ppl.func_179834_f()) {
//#endif
//$$ if (relative == SPacketPlayerPosLook.EnumFlags.X
//$$ || relative == SPacketPlayerPosLook.EnumFlags.Y
//$$ || relative == SPacketPlayerPosLook.EnumFlags.Z) {
//#endif
return null; // At least one of the coordinates is relative, so we don't care
}
}

View File

@@ -64,16 +64,20 @@ import net.minecraft.network.NetworkSide;
import net.minecraft.network.Packet;
import net.minecraft.util.PacketByteBuf;
//#if MC>=11400
//#if FABRIC>=1
import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback;
//#else
//$$ import com.github.steveice10.mc.protocol.data.game.setting.Difficulty;
//$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
//$$ import net.minecraftforge.fml.common.gameevent.TickEvent;
//$$ import net.minecraftforge.event.TickEvent;
//$$
//$$ import static com.replaymod.core.versions.MCVer.FML_BUS;
//#endif
//#if FABRIC>=1
//#else
//$$ import com.github.steveice10.mc.protocol.data.game.setting.Difficulty;
//#endif
import javax.annotation.Nullable;
import java.io.EOFException;
import java.io.IOException;
@@ -279,7 +283,7 @@ public class QuickReplaySender extends ChannelHandlerAdapter implements ReplaySe
}
private class EventHandler extends EventRegistrations {
//#if MC>=11400
//#if FABRIC>=1
{ on(PreTickCallback.EVENT, this::onTick); }
private void onTick() {
//#else

View File

@@ -25,30 +25,34 @@ import net.minecraft.stat.StatHandler;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.Box;
//#if MC>=11400
//#if FABRIC>=1
import com.replaymod.core.events.KeyBindingEventCallback;
import com.replaymod.core.events.PreRenderCallback;
import com.replaymod.core.events.PreRenderHandCallback;
import com.replaymod.replay.events.RenderSpectatorCrosshairCallback;
import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.fluid.Fluid;
import net.minecraft.tag.Tag;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.hit.HitResult;
//#else
//$$ import com.replaymod.core.versions.MCVer;
//$$ import com.replaymod.replay.events.ReplayChatMessageEvent;
//$$ import net.minecraft.util.math.RayTraceResult;
//$$ import net.minecraft.util.text.ITextComponent;
//$$ import net.minecraft.world.World;
//$$ import net.minecraftforge.client.event.EntityViewRenderEvent;
//$$ import net.minecraftforge.client.event.RenderGameOverlayEvent;
//$$ import net.minecraftforge.client.event.RenderHandEvent;
//$$ import net.minecraftforge.common.MinecraftForge;
//$$ import net.minecraftforge.eventbus.api.EventPriority;
//$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
//$$ import net.minecraftforge.fml.common.gameevent.TickEvent;
//$$ import net.minecraftforge.event.TickEvent;
//#endif
//#if MC>=11400
import net.minecraft.client.world.ClientWorld;
import net.minecraft.fluid.Fluid;
import net.minecraft.tag.Tag;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.hit.HitResult;
//#else
//$$ import com.replaymod.replay.events.ReplayChatMessageEvent;
//$$ import net.minecraft.util.math.RayTraceResult;
//$$ import net.minecraft.util.text.ITextComponent;
//$$ import net.minecraft.world.World;
//$$
//#if MC>=11300
//$$ import net.minecraft.util.math.RayTraceFluidMode;
@@ -622,7 +626,7 @@ public class CameraEntity
private EventHandler() {}
//#if MC>=11400
//#if FABRIC>=1
{ on(PreTickCallback.EVENT, this::onPreClientTick); }
private void onPreClientTick() {
//#else
@@ -633,7 +637,7 @@ public class CameraEntity
updateArmYawAndPitch();
}
//#if MC>=11400
//#if FABRIC>=1
{ on(PreRenderCallback.EVENT, this::onRenderUpdate); }
private void onRenderUpdate() {
//#else
@@ -644,11 +648,11 @@ public class CameraEntity
update();
}
//#if MC>=11400
//#if FABRIC>=1
{ on(KeyBindingEventCallback.EVENT, CameraEntity.this::handleInputEvents); }
//#endif
//#if MC>=11400
//#if FABRIC>=1
{ on(RenderSpectatorCrosshairCallback.EVENT, this::shouldRenderSpectatorCrosshair); }
private Boolean shouldRenderSpectatorCrosshair() {
return canSpectate(mc.targetedEntity);
@@ -678,7 +682,7 @@ public class CameraEntity
}
}
//#if MC>=11400
//#if FABRIC>=1
{ on(PreRenderHandCallback.EVENT, this::onRenderHand); }
private boolean onRenderHand() {
// Unless we are spectating another player, don't render our hand
@@ -693,13 +697,13 @@ public class CameraEntity
//$$ @SubscribeEvent
//$$ public void onRenderHand(RenderHandEvent event) {
//$$ // Unless we are spectating another player, don't render our hand
//$$ if (getRenderViewEntity(mc) == CameraEntity.this || !(getRenderViewEntity(mc) instanceof EntityPlayer)) {
//$$ if (getRenderViewEntity(mc) == CameraEntity.this || !(getRenderViewEntity(mc) instanceof PlayerEntity)) {
//$$ event.setCanceled(true);
//$$ }
//$$ }
//#endif
//#if MC>=11400
//#if FABRIC>=1
private void onRenderHandMonitor() {
//#else
//$$ @SubscribeEvent(priority = EventPriority.LOWEST)
@@ -753,7 +757,7 @@ public class CameraEntity
private boolean heldItemTooltipsWasTrue;
//#if MC>=11400
//#if FABRIC>=1
// FIXME fabric
//#else
//$$ @SubscribeEvent

View File

@@ -1,4 +1,4 @@
//#if MC<11400
//#if FABRIC<=0
//$$ package com.replaymod.replay.events;
//$$
//$$ import com.replaymod.replay.camera.CameraEntity;

View File

@@ -3,21 +3,24 @@ package com.replaymod.replay.handler;
import de.johni0702.minecraft.gui.utils.EventRegistrations;
import com.replaymod.replay.ReplayModReplay;
import com.replaymod.replay.gui.screen.GuiReplayViewer;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.screen.GameMenuScreen;
import net.minecraft.client.gui.screen.TitleScreen;
import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.AbstractButtonWidget;
import net.minecraft.client.resource.language.I18n;
//#if MC>=11400
//#if FABRIC>=1
import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback;
import net.minecraft.client.gui.widget.AbstractButtonWidget;
//#else
//$$ import net.minecraftforge.client.event.GuiScreenEvent;
//$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
//#endif
//#if MC>=11400
import net.minecraft.client.gui.widget.ButtonWidget;
//#endif
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@@ -36,14 +39,14 @@ public class GuiHandler extends EventRegistrations {
this.mod = mod;
}
//#if MC>=11400
//#if FABRIC>=1
{ on(InitScreenCallback.EVENT, this::injectIntoIngameMenu); }
private void injectIntoIngameMenu(Screen guiScreen, List<AbstractButtonWidget> buttonList) {
//#else
//$$ @SubscribeEvent
//$$ public void injectIntoIngameMenu(GuiScreenEvent.InitGuiEvent.Post event) {
//$$ GuiScreen guiScreen = getGui(event);
//$$ List<GuiButton> buttonList = getButtonList(event);
//$$ Screen guiScreen = getGui(event);
//$$ List<Widget> buttonList = getButtonList(event);
//#endif
if (!(guiScreen instanceof GameMenuScreen)) {
return;
@@ -163,13 +166,13 @@ public class GuiHandler extends EventRegistrations {
.forEach(button -> button.y -= 24);
}
//#if MC>=11400
//#if FABRIC>=1
{ on(InitScreenCallback.EVENT, this::ensureReplayStopped); }
private void ensureReplayStopped(Screen guiScreen, List<AbstractButtonWidget> buttonList) {
//#else
//$$ @SubscribeEvent
//$$ public void ensureReplayStopped(GuiScreenEvent.InitGuiEvent event) {
//$$ GuiScreen guiScreen = getGui(event);
//$$ Screen guiScreen = getGui(event);
//#endif
if (!(guiScreen instanceof TitleScreen || guiScreen instanceof MultiplayerScreen)) {
return;
@@ -190,18 +193,18 @@ public class GuiHandler extends EventRegistrations {
}
}
//#if MC>=11400
//#if FABRIC>=1
{ on(InitScreenCallback.EVENT, this::injectIntoMainMenu); }
private void injectIntoMainMenu(Screen guiScreen, List<AbstractButtonWidget> buttonList) {
//#else
//$$ @SubscribeEvent
//$$ public void injectIntoMainMenu(GuiScreenEvent.InitGuiEvent event) {
//$$ GuiScreen guiScreen = getGui(event);
//$$ Screen guiScreen = getGui(event);
//#endif
if (!(guiScreen instanceof TitleScreen)) {
return;
}
ButtonWidget button = new InjectedButton(
InjectedButton button = new InjectedButton(
guiScreen,
BUTTON_REPLAY_VIEWER,
guiScreen.width / 2 - 100,
@@ -243,7 +246,13 @@ public class GuiHandler extends EventRegistrations {
}
}
public static class InjectedButton extends ButtonWidget {
public static class InjectedButton extends
//#if MC>=11400
ButtonWidget
//#else
//$$ GuiButton
//#endif
{
public final Screen guiScreen;
public final int id;
private Consumer<InjectedButton> onClick;

View File

@@ -2,21 +2,18 @@
package com.replaymod.replay.mixin;
import com.replaymod.replay.camera.CameraEntity;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.network.ClientPlayerInteractionManager;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.world.GameMode;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import static com.replaymod.core.versions.MCVer.getMinecraft;
@Mixin(GameRenderer.class)
public abstract class MixinGameRenderer {
@Accessor
abstract MinecraftClient getClient();
@Redirect(
method = "renderHand",
at = @At(
@@ -25,7 +22,7 @@ public abstract class MixinGameRenderer {
)
)
private GameMode getGameMode(ClientPlayerInteractionManager interactionManager) {
ClientPlayerEntity camera = getClient().player;
ClientPlayerEntity camera = getMinecraft().player;
if (camera instanceof CameraEntity) {
// alternative doesn't really matter, the caller only checks for equality to SPECTATOR
return camera.isSpectator() ? GameMode.SPECTATOR : GameMode.SURVIVAL;

View File

@@ -23,7 +23,11 @@ import static com.replaymod.core.versions.MCVer.*;
//$$ @Mixin(RendererLivingEntity.class)
//#endif
public abstract class MixinRenderLivingBase {
//#if FABRIC>=1
@Inject(method = "method_4055", at = @At("HEAD"), cancellable = true)
//#else
//$$ @Inject(method = "canRenderName(Lnet/minecraft/entity/LivingEntity;)Z", at = @At("HEAD"), cancellable = true)
//#endif
private void replayModReplay_canRenderInvisibleName(LivingEntity entity, CallbackInfoReturnable<Boolean> ci) {
PlayerEntity thePlayer = getMinecraft().player;
if (thePlayer instanceof CameraEntity && entity.isInvisible()) {

View File

@@ -2,7 +2,7 @@
//#if MC>=10800 && MC<11400
//$$ package com.replaymod.replay.mixin;
//$$
//$$ import net.minecraft.client.GameSettings;
//$$ import net.minecraft.client.settings.GameSettings;
//$$ import net.minecraft.client.gui.FontRenderer;
//$$ import net.minecraft.client.renderer.entity.RenderManager;
//$$ import net.minecraft.entity.Entity;

View File

@@ -18,8 +18,11 @@ public class MixinTileEntityEndPortalRenderer {
//#if MC>=11300
@Redirect(method = "method_3591", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/SystemUtil;getMeasuringTimeMs()J"))
//#else
//#if MC>=11200
//$$ @Redirect(method = "renderTileEntityAt(Lnet/minecraft/tileentity/TileEntityEndPortal;DDDFIF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getSystemTime()J"))
//#else
//#if MC>=10809
//$$ @Redirect(method = "renderTileEntityAt", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getSystemTime()J"))
//$$ @Redirect(method = "renderTileEntityAt(Lnet/minecraft/tileentity/TileEntityEndPortal;DDDFI)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getSystemTime()J"))
//#else
//#if MC>=10800
//$$ @Redirect(method = "func_180544_a", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getSystemTime()J"))
@@ -28,6 +31,7 @@ public class MixinTileEntityEndPortalRenderer {
//#endif
//#endif
//#endif
//#endif
private long replayModReplay_getEnchantmentTime() {
ReplayHandler replayHandler = ReplayModReplay.instance.getReplayHandler();
if (replayHandler != null) {