mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-12-05 22:08:06 +00:00
Store command computers in a separate folder
- Remove the /computercraft-computer-folder client command, and replace it with OPEN_FILE on NeoForge, or a /computercraft-open-folder command on Fabric (which now accepts a path, rather than an id). - Store command computer files in "computercraft/command_computer/<id>". Fixes #1581.
This commit is contained in:
@@ -6,7 +6,6 @@ package dan200.computercraft.client;
|
||||
|
||||
import dan200.computercraft.api.ComputerCraftAPI;
|
||||
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.EventBusSubscriber;
|
||||
@@ -67,7 +66,6 @@ public final class ForgeClientHooks {
|
||||
}
|
||||
|
||||
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onRenderInFrame(RenderItemInFrameEvent event) {
|
||||
var state = event.getItemFrameRenderState().getRenderData(ITEM_FRAME_STATE);
|
||||
@@ -83,9 +81,4 @@ public final class ForgeClientHooks {
|
||||
if (!(event.getSound() instanceof SpeakerSound sound) || sound.getStream() == null) return;
|
||||
ClientHooks.onPlayStreaming(event.getEngine(), event.getChannel(), sound.getStream());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerClientCommands(RegisterClientCommandsEvent event) {
|
||||
ClientRegistry.registerClientCommands(event.getDispatcher(), CommandSourceStack::sendFailure);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,10 +11,9 @@ import dan200.computercraft.client.model.ExtraModels;
|
||||
import dan200.computercraft.client.render.ExtendedItemFrameRenderState;
|
||||
import dan200.computercraft.client.turtle.TurtleUpgradeModellers;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.entity.state.ItemFrameRenderState;
|
||||
import net.minecraft.client.renderer.entity.ItemFrameRenderer;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.util.context.ContextKey;
|
||||
import net.minecraft.world.entity.decoration.ItemFrame;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.ModLoader;
|
||||
@@ -98,7 +97,7 @@ public final class ForgeClientRegistry {
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerRenderStateModifiers(RegisterRenderStateModifiersEvent event) {
|
||||
event.<ItemFrame, ItemFrameRenderState>registerEntityModifier(new TypeToken<>() {
|
||||
event.registerEntityModifier(new TypeToken<ItemFrameRenderer<?>>() {
|
||||
}, (e, s) -> {
|
||||
var data = s.getRenderData(ITEM_FRAME_STATE);
|
||||
if (data == null) s.setRenderData(ITEM_FRAME_STATE, data = new ExtendedItemFrameRenderState());
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
// SPDX-FileCopyrightText: 2022 The CC: Tweaked Developers
|
||||
//
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
package dan200.computercraft.mixin.client;
|
||||
|
||||
import dan200.computercraft.shared.command.CommandComputerCraft;
|
||||
import net.minecraft.client.multiplayer.ClientPacketListener;
|
||||
import net.neoforged.neoforge.client.ClientCommandHandler;
|
||||
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;
|
||||
|
||||
/**
|
||||
* Allows triggering ComputerCraft's client commands from chat components events.
|
||||
*/
|
||||
@Mixin(ClientPacketListener.class)
|
||||
class ClientPacketListenerMixin {
|
||||
@Inject(method = "sendUnsignedCommand", at = @At("HEAD"), cancellable = true)
|
||||
void commandUnsigned(String command, CallbackInfoReturnable<Boolean> ci) {
|
||||
if (command.startsWith(CommandComputerCraft.CLIENT_OPEN_FOLDER) && ClientCommandHandler.runCommand(command)) {
|
||||
ci.setReturnValue(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,6 @@
|
||||
"defaultRequire": 1
|
||||
},
|
||||
"client": [
|
||||
"BlockRenderDispatcherMixin",
|
||||
"ClientPacketListenerMixin"
|
||||
"BlockRenderDispatcherMixin"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
import net.minecraft.network.chat.ClickEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.codec.StreamCodec;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
@@ -65,6 +66,7 @@ import net.neoforged.neoforge.registries.DeferredHolder;
|
||||
import net.neoforged.neoforge.registries.DeferredRegister;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
@@ -244,6 +246,11 @@ public class PlatformHelperImpl implements PlatformHelper {
|
||||
return stack.getCapability(MediaCapability.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClickEvent createOpenFolderAction(Path path) {
|
||||
return new ClickEvent(ClickEvent.Action.OPEN_FILE, path.toAbsolutePath().toString());
|
||||
}
|
||||
|
||||
private record RegistrationHelperImpl<R>(DeferredRegister<R> registry) implements RegistrationHelper<R> {
|
||||
@Override
|
||||
public <T extends R> RegistryEntry<T> register(String name, Supplier<T> create) {
|
||||
|
||||
Reference in New Issue
Block a user