mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-12-05 13:58:06 +00:00
Update to 1.20.5 (#1793)
- Switch most network code to use StreamCodec - Turtle/pocket computer upgrades now use DataComponentPatch instead of raw NBT.
This commit is contained in:
@@ -126,25 +126,11 @@ dependencies {
|
||||
clientApi(clientClasses(project(":forge-api"))) { cct.exclude(this) }
|
||||
implementation(project(":core")) { cct.exclude(this) }
|
||||
|
||||
"minecraftLibrary"(libs.cobalt) {
|
||||
val version = libs.versions.cobalt.get()
|
||||
jarJar.ranged(this, "[$version,${getNextVersion(version)})")
|
||||
}
|
||||
"minecraftLibrary"(libs.jzlib) {
|
||||
jarJar.ranged(this, "[${libs.versions.jzlib.get()},)")
|
||||
}
|
||||
"minecraftLibrary"(libs.netty.http) {
|
||||
jarJar.ranged(this, "[${libs.versions.netty.get()},)")
|
||||
isTransitive = false
|
||||
}
|
||||
"minecraftLibrary"(libs.netty.socks) {
|
||||
jarJar.ranged(this, "[${libs.versions.netty.get()},)")
|
||||
isTransitive = false
|
||||
}
|
||||
"minecraftLibrary"(libs.netty.proxy) {
|
||||
jarJar.ranged(this, "[${libs.versions.netty.get()},)")
|
||||
isTransitive = false
|
||||
}
|
||||
"minecraftLibrary"(libs.cobalt)
|
||||
"minecraftLibrary"(libs.jzlib)
|
||||
"minecraftLibrary"(libs.netty.http)
|
||||
"minecraftLibrary"(libs.netty.socks)
|
||||
"minecraftLibrary"(libs.netty.proxy)
|
||||
|
||||
testFixturesApi(libs.bundles.test)
|
||||
testFixturesApi(libs.bundles.kotlin)
|
||||
@@ -186,6 +172,8 @@ tasks.sourcesJar {
|
||||
for (source in cct.sourceDirectories.get()) from(source.sourceSet.allSource)
|
||||
}
|
||||
|
||||
jarJar.enable()
|
||||
|
||||
tasks.jarJar {
|
||||
archiveClassifier.set("")
|
||||
configuration(project.configurations["minecraftLibrary"])
|
||||
@@ -203,11 +191,6 @@ tasks.test {
|
||||
systemProperty("cct.test-files", layout.buildDirectory.dir("tmp/testFiles").getAbsolutePath())
|
||||
}
|
||||
|
||||
tasks.checkDependencyConsistency {
|
||||
// Forge pulls in slf4j 2.0.9 instead of 2.0.7, so we need to override that.
|
||||
override(libs.slf4j.asProvider(), "2.0.9")
|
||||
}
|
||||
|
||||
val runGametest by tasks.registering(JavaExec::class) {
|
||||
group = LifecycleBasePlugin.VERIFICATION_GROUP
|
||||
description = "Runs tests on a temporary Minecraft instance."
|
||||
@@ -250,8 +233,6 @@ tasks.withType(GenerateModuleMetadata::class).configureEach { isEnabled = false
|
||||
publishing {
|
||||
publications {
|
||||
named("maven", MavenPublication::class) {
|
||||
jarJar.component(this)
|
||||
|
||||
mavenDependencies {
|
||||
cct.configureExcludes(this)
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import dan200.computercraft.client.sound.SpeakerSound;
|
||||
import net.minecraft.commands.CommandSourceStack;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.Mod;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.neoforge.client.event.*;
|
||||
import net.neoforged.neoforge.client.event.sound.PlayStreamingSourceEvent;
|
||||
import net.neoforged.neoforge.event.TickEvent;
|
||||
@@ -18,7 +18,7 @@ import net.neoforged.neoforge.event.level.LevelEvent;
|
||||
/**
|
||||
* Forge-specific dispatch for {@link ClientHooks}.
|
||||
*/
|
||||
@Mod.EventBusSubscriber(modid = ComputerCraftAPI.MOD_ID, value = Dist.CLIENT)
|
||||
@EventBusSubscriber(modid = ComputerCraftAPI.MOD_ID, value = Dist.CLIENT)
|
||||
public final class ForgeClientHooks {
|
||||
private ForgeClientHooks() {
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ import net.minecraft.resources.ResourceLocation;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.ModLoader;
|
||||
import net.neoforged.fml.common.Mod;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
|
||||
import net.neoforged.neoforge.client.event.*;
|
||||
|
||||
@@ -23,7 +23,7 @@ import java.io.IOException;
|
||||
/**
|
||||
* Registers textures and models for items.
|
||||
*/
|
||||
@Mod.EventBusSubscriber(modid = ComputerCraftAPI.MOD_ID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD)
|
||||
@EventBusSubscriber(modid = ComputerCraftAPI.MOD_ID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD)
|
||||
public final class ForgeClientRegistry {
|
||||
private static final Object lock = new Object();
|
||||
private static boolean gatheredModellers = false;
|
||||
@@ -49,7 +49,7 @@ public final class ForgeClientRegistry {
|
||||
if (gatheredModellers) return;
|
||||
|
||||
gatheredModellers = true;
|
||||
ModLoader.get().postEvent(new RegisterTurtleModellersEvent(TurtleUpgradeModellers::register));
|
||||
ModLoader.postEvent(new RegisterTurtleModellersEvent(TurtleUpgradeModellers::register));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,18 +8,12 @@ import com.google.auto.service.AutoService;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import dan200.computercraft.client.model.FoiledModel;
|
||||
import dan200.computercraft.client.render.ModelRenderer;
|
||||
import dan200.computercraft.shared.network.NetworkMessage;
|
||||
import dan200.computercraft.shared.network.server.ServerNetworkContext;
|
||||
import dan200.computercraft.shared.platform.ForgeMessageType;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.client.resources.model.BakedModel;
|
||||
import net.minecraft.client.resources.model.ModelManager;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.network.protocol.Packet;
|
||||
import net.minecraft.network.protocol.common.ServerCommonPacketListener;
|
||||
import net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.util.RandomSource;
|
||||
@@ -44,11 +38,6 @@ public class ClientPlatformHelperImpl implements ClientPlatformHelper {
|
||||
return new FoiledModel(model);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Packet<ServerCommonPacketListener> createPacket(NetworkMessage<ServerNetworkContext> message) {
|
||||
return new ServerboundCustomPayloadPacket(ForgeMessageType.createPayload(message));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderBakedModel(PoseStack transform, MultiBufferSource buffers, BakedModel model, int lightmapCoord, int overlayLight, @Nullable int[] tints) {
|
||||
for (var renderType : model.getRenderTypes(ItemStack.EMPTY, true)) {
|
||||
|
||||
@@ -18,8 +18,10 @@ import dan200.computercraft.shared.ModRegistry;
|
||||
import dan200.computercraft.shared.config.Config;
|
||||
import dan200.computercraft.shared.config.ConfigSpec;
|
||||
import dan200.computercraft.shared.details.FluidData;
|
||||
import dan200.computercraft.shared.network.NetworkMessage;
|
||||
import dan200.computercraft.shared.network.NetworkMessages;
|
||||
import dan200.computercraft.shared.network.client.ClientNetworkContext;
|
||||
import dan200.computercraft.shared.network.server.ServerNetworkContext;
|
||||
import dan200.computercraft.shared.peripheral.commandblock.CommandBlockPeripheral;
|
||||
import dan200.computercraft.shared.peripheral.generic.methods.EnergyMethods;
|
||||
import dan200.computercraft.shared.peripheral.generic.methods.FluidMethods;
|
||||
@@ -28,12 +30,14 @@ import dan200.computercraft.shared.peripheral.modem.wired.CableBlockEntity;
|
||||
import dan200.computercraft.shared.peripheral.modem.wired.WiredModemFullBlockEntity;
|
||||
import dan200.computercraft.shared.peripheral.modem.wireless.WirelessModemBlockEntity;
|
||||
import dan200.computercraft.shared.platform.ForgeConfigFile;
|
||||
import dan200.computercraft.shared.platform.ForgeMessageType;
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import net.neoforged.bus.api.IEventBus;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.ModLoadingContext;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.fml.common.Mod;
|
||||
import net.neoforged.fml.config.ModConfig;
|
||||
import net.neoforged.fml.event.config.ModConfigEvent;
|
||||
@@ -41,22 +45,24 @@ import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||
import net.neoforged.neoforge.capabilities.Capabilities;
|
||||
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
|
||||
import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent;
|
||||
import net.neoforged.neoforge.network.event.RegisterPayloadHandlerEvent;
|
||||
import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent;
|
||||
import net.neoforged.neoforge.network.registration.PayloadRegistrar;
|
||||
import net.neoforged.neoforge.registries.NewRegistryEvent;
|
||||
import net.neoforged.neoforge.registries.RegistryBuilder;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
@Mod(ComputerCraftAPI.MOD_ID)
|
||||
@Mod.EventBusSubscriber(modid = ComputerCraftAPI.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
|
||||
@EventBusSubscriber(modid = ComputerCraftAPI.MOD_ID, bus = EventBusSubscriber.Bus.MOD)
|
||||
public final class ComputerCraft {
|
||||
private static @Nullable IEventBus eventBus;
|
||||
|
||||
public ComputerCraft(IEventBus eventBus) {
|
||||
withEventBus(eventBus, ModRegistry::register);
|
||||
|
||||
ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, ((ForgeConfigFile) ConfigSpec.serverSpec).spec());
|
||||
ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, ((ForgeConfigFile) ConfigSpec.clientSpec).spec());
|
||||
var container = ModLoadingContext.get().getActiveContainer();
|
||||
container.registerConfig(ModConfig.Type.SERVER, ((ForgeConfigFile) ConfigSpec.serverSpec).spec());
|
||||
container.registerConfig(ModConfig.Type.CLIENT, ((ForgeConfigFile) ConfigSpec.clientSpec).spec());
|
||||
}
|
||||
|
||||
private static void withEventBus(IEventBus eventBus, Runnable task) {
|
||||
@@ -93,22 +99,19 @@ public final class ComputerCraft {
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerNetwork(RegisterPayloadHandlerEvent event) {
|
||||
public static void registerNetwork(RegisterPayloadHandlersEvent event) {
|
||||
var registrar = event.registrar(ComputerCraftAPI.MOD_ID).versioned(ComputerCraftAPI.getInstalledVersion());
|
||||
|
||||
for (var type : NetworkMessages.getServerbound()) {
|
||||
var forgeType = ForgeMessageType.cast(type);
|
||||
registrar.play(forgeType.id(), forgeType.reader(), builder -> builder.server(
|
||||
(t, context) -> context.workHandler().execute(() -> t.payload().handle(() -> (ServerPlayer) context.player().orElseThrow()))
|
||||
));
|
||||
}
|
||||
for (var type : NetworkMessages.getServerbound()) registerServerbound(registrar, type);
|
||||
for (var type : NetworkMessages.getClientbound()) registerClientbound(registrar, type);
|
||||
}
|
||||
|
||||
for (var type : NetworkMessages.getClientbound()) {
|
||||
var forgeType = ForgeMessageType.cast(type);
|
||||
registrar.play(forgeType.id(), forgeType.reader(), builder -> builder.client(
|
||||
(t, context) -> context.workHandler().execute(() -> t.payload().handle(ClientHolderHolder.get()))
|
||||
));
|
||||
}
|
||||
private static <T extends NetworkMessage<ServerNetworkContext>> void registerServerbound(PayloadRegistrar registrar, CustomPacketPayload.TypeAndCodec<RegistryFriendlyByteBuf, T> type) {
|
||||
registrar.playToServer(type.type(), type.codec(), (t, context) -> context.enqueueWork(() -> t.handle(() -> (ServerPlayer) context.player())));
|
||||
}
|
||||
|
||||
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())));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -22,7 +22,7 @@ import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.Mod;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.neoforge.common.data.BlockTagsProvider;
|
||||
import net.neoforged.neoforge.common.data.ExistingFileHelper;
|
||||
import net.neoforged.neoforge.common.data.JsonCodecProvider;
|
||||
@@ -32,9 +32,10 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
|
||||
@EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD)
|
||||
public class Generators {
|
||||
@SubscribeEvent
|
||||
public static void gather(GatherDataEvent event) {
|
||||
@@ -52,6 +53,11 @@ public class Generators {
|
||||
return generator.addProvider(p -> new PrettyDataProvider<>(factory.create(p))).provider();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends DataProvider> T add(BiFunction<PackOutput, CompletableFuture<HolderLookup.Provider>, T> factory) {
|
||||
return generator.addProvider(p -> factory.apply(p, registries));
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> void addFromCodec(String name, PackType type, String directory, Codec<T> codec, Consumer<BiConsumer<ResourceLocation, T>> output) {
|
||||
add(out -> {
|
||||
@@ -70,7 +76,7 @@ public class Generators {
|
||||
|
||||
@Override
|
||||
public void lootTable(List<LootTableProvider.SubProviderEntry> tables) {
|
||||
add(out -> new LootTableProvider(out, Set.of(), tables));
|
||||
add((out, registries) -> new LootTableProvider(out, Set.of(), tables, registries));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -8,11 +8,13 @@ import dan200.computercraft.api.ComputerCraftAPI;
|
||||
import dan200.computercraft.shared.command.CommandComputerCraft;
|
||||
import dan200.computercraft.shared.network.client.UpgradesLoadedMessage;
|
||||
import dan200.computercraft.shared.network.server.ServerNetworking;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.level.chunk.LevelChunk;
|
||||
import net.neoforged.bus.api.EventPriority;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.Mod;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.neoforge.event.*;
|
||||
import net.neoforged.neoforge.event.entity.EntityJoinLevelEvent;
|
||||
import net.neoforged.neoforge.event.entity.living.LivingDropsEvent;
|
||||
@@ -26,7 +28,7 @@ import net.neoforged.neoforge.event.server.ServerStoppedEvent;
|
||||
/**
|
||||
* Forge-specific dispatch for {@link CommonHooks}.
|
||||
*/
|
||||
@Mod.EventBusSubscriber(modid = ComputerCraftAPI.MOD_ID)
|
||||
@EventBusSubscriber(modid = ComputerCraftAPI.MOD_ID)
|
||||
public class ForgeCommonHooks {
|
||||
@SubscribeEvent
|
||||
public static void onServerTick(TickEvent.ServerTickEvent event) {
|
||||
@@ -90,7 +92,7 @@ public class ForgeCommonHooks {
|
||||
|
||||
@SubscribeEvent
|
||||
public static void lootLoad(LootTableLoadEvent event) {
|
||||
var pool = CommonHooks.getExtraLootPool(event.getName());
|
||||
var pool = CommonHooks.getExtraLootPool(ResourceKey.create(Registries.LOOT_TABLE, event.getName()));
|
||||
if (pool != null) event.getTable().addPool(pool.build());
|
||||
}
|
||||
|
||||
|
||||
@@ -17,9 +17,9 @@ import net.neoforged.neoforge.common.util.FakePlayer;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.OptionalInt;
|
||||
|
||||
import static dan200.computercraft.shared.platform.FakePlayerConstants.MAX_REACH;
|
||||
|
||||
class FakePlayerExt extends FakePlayer {
|
||||
private static final EntityDimensions DIMENSIONS = EntityDimensions.fixed(0, 0);
|
||||
|
||||
FakePlayerExt(ServerLevel serverLevel, GameProfile profile) {
|
||||
super(serverLevel, profile);
|
||||
}
|
||||
@@ -45,18 +45,8 @@ class FakePlayerExt extends FakePlayer {
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getBlockReach() {
|
||||
return MAX_REACH;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getEntityReach() {
|
||||
return MAX_REACH;
|
||||
public EntityDimensions getDefaultDimensions(Pose pose) {
|
||||
return DIMENSIONS;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -63,7 +63,7 @@ public class ForgeContainerTransfer implements ContainerTransfer.Slotted {
|
||||
if (movedStack.isEmpty()) {
|
||||
movedStack = stack.copy();
|
||||
if (stack.getMaxStackSize() < maxAmount) maxAmount = stack.getMaxStackSize();
|
||||
} else if (!ItemStack.isSameItemSameTags(stack, movedStack)) {
|
||||
} else if (!ItemStack.isSameItemSameComponents(stack, movedStack)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
// SPDX-FileCopyrightText: 2024 The CC: Tweaked Developers
|
||||
//
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
package dan200.computercraft.shared.platform;
|
||||
|
||||
import dan200.computercraft.shared.network.MessageType;
|
||||
import dan200.computercraft.shared.network.NetworkMessage;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
/**
|
||||
* A {@link MessageType} implementation for Forge.
|
||||
* <p>
|
||||
* This wraps {@link NetworkMessage}s into a {@link CustomPacketPayload}, allowing us to easily use Minecraft's existing
|
||||
* custom packets.
|
||||
*
|
||||
* @param id The id of this message.
|
||||
* @param reader Read this message from a network buffer.
|
||||
* @param <T> The type of our {@link NetworkMessage}.
|
||||
*/
|
||||
public record ForgeMessageType<T extends NetworkMessage<?>>(
|
||||
ResourceLocation id, FriendlyByteBuf.Reader<Payload<T>> reader
|
||||
) implements MessageType<T> {
|
||||
public static <T extends NetworkMessage<?>> ForgeMessageType<T> cast(MessageType<T> type) {
|
||||
return (ForgeMessageType<T>) type;
|
||||
}
|
||||
|
||||
public static CustomPacketPayload createPayload(NetworkMessage<?> message) {
|
||||
return new Payload<>(message);
|
||||
}
|
||||
|
||||
public record Payload<T extends NetworkMessage<?>>(T payload) implements CustomPacketPayload {
|
||||
@Override
|
||||
public void write(FriendlyByteBuf buf) {
|
||||
payload().write(buf);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation id() {
|
||||
return payload().type().id();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,9 +18,6 @@ import dan200.computercraft.api.peripheral.IPeripheral;
|
||||
import dan200.computercraft.api.peripheral.PeripheralCapability;
|
||||
import dan200.computercraft.impl.Peripherals;
|
||||
import dan200.computercraft.shared.config.ConfigFile;
|
||||
import dan200.computercraft.shared.network.MessageType;
|
||||
import dan200.computercraft.shared.network.NetworkMessage;
|
||||
import dan200.computercraft.shared.network.client.ClientNetworkContext;
|
||||
import dan200.computercraft.shared.network.container.ContainerData;
|
||||
import dan200.computercraft.shared.util.InventoryUtil;
|
||||
import net.minecraft.commands.synchronization.ArgumentTypeInfo;
|
||||
@@ -28,10 +25,8 @@ import net.minecraft.commands.synchronization.ArgumentTypeInfos;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.network.protocol.Packet;
|
||||
import net.minecraft.network.protocol.common.ClientCommonPacketListener;
|
||||
import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket;
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
import net.minecraft.network.codec.StreamCodec;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
@@ -54,9 +49,7 @@ import net.minecraft.world.item.context.UseOnContext;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.item.crafting.Recipe;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.BlockHitResult;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
@@ -81,8 +74,9 @@ import javax.annotation.Nullable;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.function.*;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
@AutoService(dan200.computercraft.impl.PlatformHelper.class)
|
||||
public class PlatformHelperImpl implements PlatformHelper {
|
||||
@@ -115,13 +109,7 @@ public class PlatformHelperImpl implements PlatformHelper {
|
||||
object.add(ConditionalOps.DEFAULT_CONDITIONS_KEY, conditions);
|
||||
}
|
||||
|
||||
conditions.add(ICondition.CODEC.encodeStart(JsonOps.INSTANCE, new ModLoadedCondition(modId)).getOrThrow(false, x -> {
|
||||
}));
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends BlockEntity> BlockEntityType<T> createBlockEntityType(BiFunction<BlockPos, BlockState, T> factory, Block block) {
|
||||
return new BlockEntityType<>(factory::apply, Set.of(block), null);
|
||||
conditions.add(ICondition.CODEC.encodeStart(JsonOps.INSTANCE, new ModLoadedCondition(modId)).getOrThrow());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -130,23 +118,13 @@ public class PlatformHelperImpl implements PlatformHelper {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <C extends AbstractContainerMenu, T extends ContainerData> MenuType<C> createMenuType(Function<FriendlyByteBuf, T> reader, ContainerData.Factory<C, T> factory) {
|
||||
return IMenuTypeExtension.create((id, player, data) -> factory.create(id, player, reader.apply(data)));
|
||||
public <C extends AbstractContainerMenu, T extends ContainerData> MenuType<C> createMenuType(StreamCodec<RegistryFriendlyByteBuf, T> codec, ContainerData.Factory<C, T> factory) {
|
||||
return IMenuTypeExtension.create((id, player, data) -> factory.create(id, player, codec.decode(data)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void openMenu(Player player, MenuProvider owner, ContainerData menu) {
|
||||
((ServerPlayer) player).openMenu(owner, menu::toBytes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends NetworkMessage<?>> MessageType<T> createMessageType(ResourceLocation id, FriendlyByteBuf.Reader<T> reader) {
|
||||
return new ForgeMessageType<>(id, b -> new ForgeMessageType.Payload<>(reader.apply(b)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Packet<ClientCommonPacketListener> createPacket(NetworkMessage<ClientNetworkContext> message) {
|
||||
return new ClientboundCustomPayloadPacket(ForgeMessageType.createPayload(message));
|
||||
player.openMenu(owner, menu::toBytes);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -189,14 +167,13 @@ public class PlatformHelperImpl implements PlatformHelper {
|
||||
public RecipeIngredients getRecipeIngredients() {
|
||||
return new RecipeIngredients(
|
||||
Ingredient.of(Tags.Items.DUSTS_REDSTONE),
|
||||
Ingredient.of(Tags.Items.STRING),
|
||||
Ingredient.of(Tags.Items.LEATHER),
|
||||
Ingredient.of(Tags.Items.STONE),
|
||||
Ingredient.of(Tags.Items.STRINGS),
|
||||
Ingredient.of(Tags.Items.LEATHERS),
|
||||
Ingredient.of(Tags.Items.STONES),
|
||||
Ingredient.of(Tags.Items.GLASS_PANES),
|
||||
Ingredient.of(Tags.Items.INGOTS_GOLD),
|
||||
Ingredient.of(Tags.Items.STORAGE_BLOCKS_GOLD),
|
||||
Ingredient.of(Tags.Items.INGOTS_IRON),
|
||||
Ingredient.of(Tags.Items.HEADS),
|
||||
Ingredient.of(Tags.Items.DYES),
|
||||
Ingredient.of(Tags.Items.ENDER_PEARLS),
|
||||
Ingredient.of(Tags.Items.CHESTS_WOODEN)
|
||||
@@ -227,7 +204,7 @@ public class PlatformHelperImpl implements PlatformHelper {
|
||||
|
||||
@Override
|
||||
public int getBurnTime(ItemStack stack) {
|
||||
return CommonHooks.getBurnTime(stack, null);
|
||||
return stack.getBurnTime(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -263,11 +240,6 @@ public class PlatformHelperImpl implements PlatformHelper {
|
||||
return new FakePlayerExt(world, profile);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getReachDistance(Player player) {
|
||||
return player.getBlockReach();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasToolUsage(ItemStack stack) {
|
||||
return stack.canPerformAction(ToolActions.SHOVEL_FLATTEN) || stack.canPerformAction(ToolActions.HOE_TILL);
|
||||
@@ -305,8 +277,8 @@ public class PlatformHelperImpl implements PlatformHelper {
|
||||
|
||||
var block = level.getBlockState(hit.getBlockPos());
|
||||
if (event.getUseBlock() != Event.Result.DENY && !block.isAir() && canUseBlock.test(block)) {
|
||||
var useResult = block.use(level, player, InteractionHand.MAIN_HAND, hit);
|
||||
if (useResult.consumesAction()) return useResult;
|
||||
var useResult = block.useItemOn(stack, level, player, InteractionHand.MAIN_HAND, hit);
|
||||
if (useResult.consumesAction()) return useResult.result();
|
||||
}
|
||||
|
||||
return event.getUseItem() == Event.Result.DENY ? InteractionResult.PASS : stack.useOn(context);
|
||||
|
||||
@@ -12,7 +12,6 @@ protected com.mojang.blaze3d.vertex.VertexBuffer format
|
||||
|
||||
# ClientTableFormatter
|
||||
public net.minecraft.client.gui.components.ChatComponent allMessages
|
||||
public net.minecraft.client.gui.components.ChatComponent refreshTrimmedMessage()V
|
||||
|
||||
# ItemPocketRenderer/ItemPrintoutRenderer
|
||||
public net.minecraft.client.renderer.ItemInHandRenderer calculateMapTilt(F)F
|
||||
@@ -33,3 +32,5 @@ public net.minecraft.data.models.ItemModelGenerators output
|
||||
public net.minecraft.data.models.ItemModelGenerators generateFlatItem(Lnet/minecraft/world/item/Item;Lnet/minecraft/data/models/model/ModelTemplate;)V
|
||||
public net.minecraft.data.models.ItemModelGenerators generateFlatItem(Lnet/minecraft/world/item/Item;Ljava/lang/String;Lnet/minecraft/data/models/model/ModelTemplate;)V
|
||||
public net.minecraft.data.models.model.TextureSlot create(Ljava/lang/String;)Lnet/minecraft/data/models/model/TextureSlot;
|
||||
|
||||
public net.minecraft.util.datafix.fixes.ItemStackComponentizationFix$ItemStackData
|
||||
|
||||
@@ -26,7 +26,7 @@ CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles a
|
||||
[[dependencies.computercraft]]
|
||||
modId="neoforge"
|
||||
type="required"
|
||||
versionRange="[${neoVersion},20.5)"
|
||||
versionRange="[${neoVersion},20.6)"
|
||||
ordering="NONE"
|
||||
side="BOTH"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user