1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2025-08-30 17:17:55 +00:00

Update to Minecraft 1.21.7

This commit is contained in:
Jonathan Coates
2025-06-30 22:55:55 +01:00
parent 76869593f0
commit 67412a2b72
10 changed files with 42 additions and 41 deletions

View File

@@ -15,4 +15,4 @@ isUnstable=true
modVersion=1.116.0 modVersion=1.116.0
# Minecraft properties: We want to configure this here so we can read it in settings.gradle # Minecraft properties: We want to configure this here so we can read it in settings.gradle
mcVersion=1.21.6 mcVersion=1.21.7

View File

@@ -7,14 +7,14 @@
# Minecraft # Minecraft
# MC version is specified in gradle.properties, as we need that in settings.gradle. # MC version is specified in gradle.properties, as we need that in settings.gradle.
# Remember to update corresponding versions in fabric.mod.json/neoforge.mods.toml # Remember to update corresponding versions in fabric.mod.json/neoforge.mods.toml
fabric-api = "0.127.0+1.21.6" fabric-api = "0.128.0+1.21.7"
fabric-loader = "0.16.14" fabric-loader = "0.16.14"
neoForge = "21.6.12-beta" neoForge = "21.7.1-beta"
neoMergeTool = "2.0.0" neoMergeTool = "2.0.0"
mixin = "0.8.5" mixin = "0.8.5"
parchment = "2025.04.19" parchment = "2025.06.29"
parchmentMc = "1.21.5" parchmentMc = "1.21.6"
yarn = "1.21.5+build.1" yarn = "1.21.7+build.1"
# Core dependencies (these versions are tied to the version Minecraft uses) # Core dependencies (these versions are tied to the version Minecraft uses)
fastutil = "8.5.15" fastutil = "8.5.15"

View File

@@ -18,6 +18,7 @@ import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.block.model.ItemTransform; import net.minecraft.client.renderer.block.model.ItemTransform;
import net.minecraft.client.renderer.item.ItemModelResolver; import net.minecraft.client.renderer.item.ItemModelResolver;
import net.minecraft.client.renderer.item.ItemStackRenderState; import net.minecraft.client.renderer.item.ItemStackRenderState;
import net.minecraft.client.renderer.item.TrackingItemStackRenderState;
import net.minecraft.client.renderer.special.SpecialModelRenderer; import net.minecraft.client.renderer.special.SpecialModelRenderer;
import net.minecraft.client.resources.model.ModelBaker; import net.minecraft.client.resources.model.ModelBaker;
import net.minecraft.core.component.DataComponentPatch; import net.minecraft.core.component.DataComponentPatch;
@@ -64,7 +65,7 @@ public final class ItemUpgradeModel implements TurtleUpgradeModel {
public void renderForItem(UpgradeData<ITurtleUpgrade> upgrade, TurtleSide side, ItemStackRenderState renderer, ItemModelResolver resolver, ItemTransform transform, int seed) { public void renderForItem(UpgradeData<ITurtleUpgrade> upgrade, TurtleSide side, ItemStackRenderState renderer, ItemModelResolver resolver, ItemTransform transform, int seed) {
renderer.appendModelIdentityElement(this); renderer.appendModelIdentityElement(this);
var childState = new ItemStackRenderState(); var childState = new TrackingItemStackRenderState();
resolver.updateForTopItem(childState, upgrade.getUpgradeItem(), ItemDisplayContext.NONE, null, null, seed); resolver.updateForTopItem(childState, upgrade.getUpgradeItem(), ItemDisplayContext.NONE, null, null, seed);
if (!childState.isEmpty()) { if (!childState.isEmpty()) {
renderer.appendModelIdentityElement(childState.getModelIdentity()); renderer.appendModelIdentityElement(childState.getModelIdentity());

View File

@@ -24,6 +24,7 @@ import dan200.computercraft.shared.ModRegistry;
import dan200.computercraft.shared.computer.inventory.AbstractComputerMenu; import dan200.computercraft.shared.computer.inventory.AbstractComputerMenu;
import net.minecraft.client.color.item.ItemTintSource; import net.minecraft.client.color.item.ItemTintSource;
import net.minecraft.client.gui.render.pip.PictureInPictureRenderer; import net.minecraft.client.gui.render.pip.PictureInPictureRenderer;
import net.minecraft.client.gui.render.state.pip.PictureInPictureRenderState;
import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.client.gui.screens.MenuScreens;
import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.inventory.MenuAccess; import net.minecraft.client.gui.screens.inventory.MenuAccess;
@@ -49,7 +50,6 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Function; import java.util.function.Function;
/** /**
@@ -193,7 +193,11 @@ public final class ClientRegistry {
register.accept(TurtleShowElfOverlay.ID, TurtleShowElfOverlay.CODEC); register.accept(TurtleShowElfOverlay.ID, TurtleShowElfOverlay.CODEC);
} }
public static void registerPictureInPictureRenderers(Consumer<Function<MultiBufferSource.BufferSource, PictureInPictureRenderer<?>>> register) { public interface RegisterPictureInPictureRenderer {
register.accept(PrintoutScreen.PrintoutPictureRenderer::new); <T extends PictureInPictureRenderState> void register(Class<T> state, Function<MultiBufferSource.BufferSource, PictureInPictureRenderer<T>> factory);
}
public static void registerPictureInPictureRenderers(RegisterPictureInPictureRenderer register) {
register.register(PrintoutScreen.PrintoutRenderState.class, PrintoutScreen.PrintoutPictureRenderer::new);
} }
} }

View File

@@ -4,7 +4,6 @@
package dan200.computercraft.client.platform; package dan200.computercraft.client.platform;
import com.google.auto.service.AutoService;
import dan200.computercraft.client.ClientTableFormatter; import dan200.computercraft.client.ClientTableFormatter;
import dan200.computercraft.client.gui.AbstractComputerScreen; import dan200.computercraft.client.gui.AbstractComputerScreen;
import dan200.computercraft.client.gui.OptionScreen; import dan200.computercraft.client.gui.OptionScreen;
@@ -36,7 +35,6 @@ import java.util.UUID;
/** /**
* The client-side implementation of {@link ClientNetworkContext}. * The client-side implementation of {@link ClientNetworkContext}.
*/ */
@AutoService(ClientNetworkContext.class)
public final class ClientNetworkContextImpl implements ClientNetworkContext { public final class ClientNetworkContextImpl implements ClientNetworkContext {
@Override @Override
public void handleChatTable(TableBuilder table) { public void handleChatTable(TableBuilder table) {

View File

@@ -9,15 +9,14 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.builder.RequiredArgumentBuilder; import com.mojang.brigadier.builder.RequiredArgumentBuilder;
import dan200.computercraft.api.ComputerCraftAPI; import dan200.computercraft.api.ComputerCraftAPI;
import dan200.computercraft.api.client.FabricComputerCraftAPIClient; import dan200.computercraft.api.client.FabricComputerCraftAPIClient;
import dan200.computercraft.client.platform.ClientNetworkContextImpl;
import dan200.computercraft.client.platform.FabricModelKey; import dan200.computercraft.client.platform.FabricModelKey;
import dan200.computercraft.client.platform.ModelKey; import dan200.computercraft.client.platform.ModelKey;
import dan200.computercraft.core.util.Nullability; import dan200.computercraft.core.util.Nullability;
import dan200.computercraft.impl.Services;
import dan200.computercraft.shared.ComputerCraft; import dan200.computercraft.shared.ComputerCraft;
import dan200.computercraft.shared.ModRegistry; import dan200.computercraft.shared.ModRegistry;
import dan200.computercraft.shared.config.ConfigSpec; import dan200.computercraft.shared.config.ConfigSpec;
import dan200.computercraft.shared.network.NetworkMessages; import dan200.computercraft.shared.network.NetworkMessages;
import dan200.computercraft.shared.network.client.ClientNetworkContext;
import dan200.computercraft.shared.platform.FabricConfigFile; import dan200.computercraft.shared.platform.FabricConfigFile;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
@@ -32,7 +31,10 @@ import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.Util; import net.minecraft.Util;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.color.item.ItemTintSources; import net.minecraft.client.color.item.ItemTintSources;
import net.minecraft.client.gui.render.pip.PictureInPictureRenderer;
import net.minecraft.client.gui.render.state.pip.PictureInPictureRenderState;
import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.client.gui.screens.MenuScreens;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.chunk.ChunkSectionLayer; import net.minecraft.client.renderer.chunk.ChunkSectionLayer;
import net.minecraft.client.renderer.item.ItemModels; import net.minecraft.client.renderer.item.ItemModels;
import net.minecraft.client.renderer.item.properties.conditional.ConditionalItemModelProperties; import net.minecraft.client.renderer.item.properties.conditional.ConditionalItemModelProperties;
@@ -45,12 +47,13 @@ import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Function;
import static dan200.computercraft.core.util.Nullability.assertNonNull; import static dan200.computercraft.core.util.Nullability.assertNonNull;
public class ComputerCraftClient { public class ComputerCraftClient {
public static void init() { public static void init() {
var clientNetwork = Services.load(ClientNetworkContext.class); var clientNetwork = new ClientNetworkContextImpl();
for (var type : NetworkMessages.getClientbound()) { for (var type : NetworkMessages.getClientbound()) {
ClientPlayNetworking.registerGlobalReceiver( ClientPlayNetworking.registerGlobalReceiver(
type.type(), (packet, responseSender) -> packet.handle(clientNetwork) type.type(), (packet, responseSender) -> packet.handle(clientNetwork)
@@ -81,7 +84,12 @@ public class ComputerCraftClient {
BlockRenderLayerMap.putBlock(ModRegistry.Blocks.MONITOR_NORMAL.get(), ChunkSectionLayer.CUTOUT); BlockRenderLayerMap.putBlock(ModRegistry.Blocks.MONITOR_NORMAL.get(), ChunkSectionLayer.CUTOUT);
BlockRenderLayerMap.putBlock(ModRegistry.Blocks.MONITOR_ADVANCED.get(), ChunkSectionLayer.CUTOUT); BlockRenderLayerMap.putBlock(ModRegistry.Blocks.MONITOR_ADVANCED.get(), ChunkSectionLayer.CUTOUT);
ClientRegistry.registerPictureInPictureRenderers(f -> SpecialGuiElementRegistry.register(c -> f.apply(c.vertexConsumers()))); ClientRegistry.registerPictureInPictureRenderers(new ClientRegistry.RegisterPictureInPictureRenderer() {
@Override
public <T extends PictureInPictureRenderState> void register(Class<T> ty, Function<MultiBufferSource.BufferSource, PictureInPictureRenderer<T>> f) {
SpecialGuiElementRegistry.register(c -> f.apply(c.vertexConsumers()));
}
});
ClientTickEvents.START_CLIENT_TICK.register(client -> ClientHooks.onTick()); ClientTickEvents.START_CLIENT_TICK.register(client -> ClientHooks.onTick());
// This isn't 100% consistent with Forge, but not worth a mixin. // This isn't 100% consistent with Forge, but not worth a mixin.

View File

@@ -50,8 +50,8 @@
], ],
"depends": { "depends": {
"fabricloader": ">=0.16.14", "fabricloader": ">=0.16.14",
"fabric-api": ">=0.127.0", "fabric-api": ">=0.128.0",
"minecraft": "=1.21.6" "minecraft": "=1.21.7"
}, },
"accessWidener": "computercraft.accesswidener" "accessWidener": "computercraft.accesswidener"
} }

View File

@@ -7,9 +7,11 @@ package dan200.computercraft.client;
import com.google.common.reflect.TypeToken; import com.google.common.reflect.TypeToken;
import dan200.computercraft.api.ComputerCraftAPI; import dan200.computercraft.api.ComputerCraftAPI;
import dan200.computercraft.api.client.turtle.RegisterTurtleModelEvent; import dan200.computercraft.api.client.turtle.RegisterTurtleModelEvent;
import dan200.computercraft.client.platform.ClientNetworkContextImpl;
import dan200.computercraft.client.platform.ForgeModelKey; import dan200.computercraft.client.platform.ForgeModelKey;
import dan200.computercraft.client.platform.ModelKey; import dan200.computercraft.client.platform.ModelKey;
import dan200.computercraft.client.render.ExtendedItemFrameRenderState; import dan200.computercraft.client.render.ExtendedItemFrameRenderState;
import dan200.computercraft.shared.network.NetworkMessages;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.entity.ItemFrameRenderer; import net.minecraft.client.renderer.entity.ItemFrameRenderer;
import net.minecraft.client.resources.model.ModelBaker; import net.minecraft.client.resources.model.ModelBaker;
@@ -22,6 +24,7 @@ import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
import net.neoforged.neoforge.client.event.*; import net.neoforged.neoforge.client.event.*;
import net.neoforged.neoforge.client.model.standalone.UnbakedStandaloneModel; import net.neoforged.neoforge.client.model.standalone.UnbakedStandaloneModel;
import net.neoforged.neoforge.client.network.event.RegisterClientPayloadHandlersEvent;
import net.neoforged.neoforge.client.renderstate.RegisterRenderStateModifiersEvent; import net.neoforged.neoforge.client.renderstate.RegisterRenderStateModifiersEvent;
import java.util.ArrayDeque; import java.util.ArrayDeque;
@@ -40,6 +43,14 @@ public final class ForgeClientRegistry {
private ForgeClientRegistry() { private ForgeClientRegistry() {
} }
@SubscribeEvent
public static void registerNetwork(RegisterClientPayloadHandlersEvent event) {
var context = new ClientNetworkContextImpl();
for (var type : NetworkMessages.getClientbound()) {
event.register(type.type(), (packet, ctx) -> ctx.enqueueWork(() -> packet.handle(context)));
}
}
@SubscribeEvent @SubscribeEvent
public static void registerModels(ModelEvent.RegisterStandalone event) { public static void registerModels(ModelEvent.RegisterStandalone event) {
// Load resources // Load resources

View File

@@ -13,7 +13,6 @@ import dan200.computercraft.api.peripheral.PeripheralCapability;
import dan200.computercraft.api.pocket.IPocketUpgrade; import dan200.computercraft.api.pocket.IPocketUpgrade;
import dan200.computercraft.api.turtle.ITurtleUpgrade; import dan200.computercraft.api.turtle.ITurtleUpgrade;
import dan200.computercraft.impl.PocketUpgrades; import dan200.computercraft.impl.PocketUpgrades;
import dan200.computercraft.impl.Services;
import dan200.computercraft.impl.TurtleUpgrades; import dan200.computercraft.impl.TurtleUpgrades;
import dan200.computercraft.shared.CommonHooks; import dan200.computercraft.shared.CommonHooks;
import dan200.computercraft.shared.ModRegistry; import dan200.computercraft.shared.ModRegistry;
@@ -135,7 +134,7 @@ public final class ComputerCraft {
} }
private static <T extends NetworkMessage<ClientNetworkContext>> void registerClientbound(PayloadRegistrar registrar, CustomPacketPayload.TypeAndCodec<RegistryFriendlyByteBuf, T> type) { private static <T extends NetworkMessage<ClientNetworkContext>> void registerClientbound(PayloadRegistrar registrar, CustomPacketPayload.TypeAndCodec<RegistryFriendlyByteBuf, T> type) {
registrar.playToClient(type.type(), type.codec(), (t, context) -> context.enqueueWork(() -> t.handle(ClientHolderHolder.get()))); registrar.playToClient(type.type(), type.codec());
} }
/** /**
@@ -220,24 +219,4 @@ public final class ComputerCraft {
public static void onCreativeTab(BuildCreativeModeTabContentsEvent event) { public static void onCreativeTab(BuildCreativeModeTabContentsEvent event) {
CommonHooks.onBuildCreativeTab(event.getTabKey(), event.getParameters(), event); CommonHooks.onBuildCreativeTab(event.getTabKey(), event.getParameters(), event);
} }
/**
* This holds an instance of {@link ClientNetworkContext}. This is a separate class to ensure that the instance is
* lazily created when needed on the client.
*/
private static final class ClientHolderHolder {
private static final @Nullable ClientNetworkContext INSTANCE;
private static final @Nullable Throwable ERROR;
static {
var helper = Services.tryLoad(ClientNetworkContext.class);
INSTANCE = helper.instance();
ERROR = helper.error();
}
static ClientNetworkContext get() {
var instance = INSTANCE;
return instance == null ? Services.raise(ClientNetworkContext.class, ERROR) : instance;
}
}
} }

View File

@@ -26,7 +26,7 @@ CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles a
[[dependencies.computercraft]] [[dependencies.computercraft]]
modId="neoforge" modId="neoforge"
type="required" type="required"
versionRange="[${neoVersion},21.7)" versionRange="[${neoVersion},21.8)"
ordering="NONE" ordering="NONE"
side="BOTH" side="BOTH"