mirror of
https://github.com/TeamMidnightDust/MidnightControls.git
synced 2025-12-13 23:25:10 +01:00
Working Neoforge support
Yay!
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
package eu.midnightdust.midnightcontrols.client.util.platform.neoforge;
|
||||
|
||||
import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen;
|
||||
import net.minecraft.item.ItemGroup;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Implementation of neoforge methods for
|
||||
* @see eu.midnightdust.midnightcontrols.client.util.platform.ItemGroupUtil
|
||||
*/
|
||||
public class ItemGroupUtilImpl {
|
||||
public static List<ItemGroup> getVisibleGroups(CreativeInventoryScreen screen) {
|
||||
return (screen.getCurrentPage().getVisibleTabs());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package eu.midnightdust.midnightcontrols.client.util.platform.neoforge;
|
||||
|
||||
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
||||
import net.minecraft.network.packet.CustomPayload;
|
||||
import net.minecraft.network.packet.Packet;
|
||||
import net.minecraft.network.packet.c2s.common.CustomPayloadC2SPacket;
|
||||
|
||||
import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.client;
|
||||
|
||||
/**
|
||||
* Implementation of neoforge methods for
|
||||
* @see eu.midnightdust.midnightcontrols.client.util.platform.NetworkUtil
|
||||
*/
|
||||
public class NetworkUtilImpl {
|
||||
private static final ClientPlayNetworkHandler handler = client.getNetworkHandler();
|
||||
|
||||
public static void sendPacketC2S(Packet<?> packet) {
|
||||
if (handler != null)
|
||||
handler.send(packet);
|
||||
}
|
||||
public static void sendPayloadC2S(CustomPayload payload) {
|
||||
if (handler != null && client.world != null)
|
||||
handler.send(new CustomPayloadC2SPacket(payload));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package eu.midnightdust.midnightcontrols.neoforge;
|
||||
|
||||
import eu.midnightdust.midnightcontrols.client.MidnightControlsClient;
|
||||
import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig;
|
||||
import eu.midnightdust.midnightcontrols.client.util.platform.NetworkUtil;
|
||||
import eu.midnightdust.midnightcontrols.packet.ControlsModePayload;
|
||||
import eu.midnightdust.midnightcontrols.packet.HelloPayload;
|
||||
import net.minecraft.resource.DirectoryResourcePack;
|
||||
import net.minecraft.resource.ResourcePackInfo;
|
||||
import net.minecraft.resource.ResourcePackPosition;
|
||||
import net.minecraft.resource.ResourcePackProfile;
|
||||
import net.minecraft.resource.ResourcePackSource;
|
||||
import net.minecraft.resource.ResourceType;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.ModList;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.fml.common.Mod;
|
||||
import net.neoforged.neoforge.client.event.ClientPlayerNetworkEvent;
|
||||
import net.neoforged.neoforge.client.event.ClientTickEvent;
|
||||
import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent;
|
||||
import net.neoforged.neoforge.client.event.ScreenEvent;
|
||||
import net.neoforged.neoforge.event.AddPackFindersEvent;
|
||||
import net.neoforged.neoforgespi.locating.IModFile;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import static eu.midnightdust.midnightcontrols.MidnightControls.id;
|
||||
import static eu.midnightdust.midnightcontrols.MidnightControlsConstants.NAMESPACE;
|
||||
import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.BINDING_LOOK_DOWN;
|
||||
import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.BINDING_LOOK_LEFT;
|
||||
import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.BINDING_LOOK_RIGHT;
|
||||
import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.BINDING_LOOK_UP;
|
||||
import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.BINDING_RING;
|
||||
import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.client;
|
||||
|
||||
@Mod(value = NAMESPACE, dist = Dist.CLIENT)
|
||||
public class MidnightControlsClientNeoforge {
|
||||
public MidnightControlsClientNeoforge() {
|
||||
MidnightControlsClient.initClient();
|
||||
}
|
||||
|
||||
@EventBusSubscriber(modid = NAMESPACE, bus = EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
|
||||
public class ClientEvents {
|
||||
@SubscribeEvent
|
||||
public static void registerKeybinding(RegisterKeyMappingsEvent event) {
|
||||
event.register(BINDING_RING);
|
||||
event.register(BINDING_LOOK_UP);
|
||||
event.register(BINDING_LOOK_DOWN);
|
||||
event.register(BINDING_LOOK_LEFT);
|
||||
event.register(BINDING_LOOK_RIGHT);
|
||||
}
|
||||
@SubscribeEvent
|
||||
public static void addPackFinders(AddPackFindersEvent event) {
|
||||
if (event.getPackType() == ResourceType.CLIENT_RESOURCES) {
|
||||
registerResourcePack(event, id("bedrock"), false);
|
||||
registerResourcePack(event, id("legacy"), false);
|
||||
}
|
||||
}
|
||||
private static void registerResourcePack(AddPackFindersEvent event, Identifier id, boolean alwaysEnabled) {
|
||||
event.addRepositorySource(((profileAdder) -> {
|
||||
IModFile file = ModList.get().getModFileById(id.getNamespace()).getFile();
|
||||
try {
|
||||
ResourcePackProfile.PackFactory pack = new DirectoryResourcePack.DirectoryBackedFactory(file.findResource("resourcepacks/" + id.getPath()));
|
||||
ResourcePackInfo info = new ResourcePackInfo(id.toString(), Text.of(id.getNamespace()+"/"+id.getPath()), ResourcePackSource.BUILTIN, Optional.empty());
|
||||
ResourcePackProfile packProfile = ResourcePackProfile.create(info, pack, ResourceType.CLIENT_RESOURCES, new ResourcePackPosition(alwaysEnabled, ResourcePackProfile.InsertionPosition.TOP, false));
|
||||
if (packProfile != null) {
|
||||
profileAdder.accept(packProfile);
|
||||
}
|
||||
} catch (NullPointerException e) {e.fillInStackTrace();}
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
@EventBusSubscriber(modid = NAMESPACE, bus = EventBusSubscriber.Bus.GAME, value = Dist.CLIENT)
|
||||
public class ClientGameEvents {
|
||||
@SubscribeEvent
|
||||
public static void sendPacketOnLogin(ClientPlayerNetworkEvent.LoggingIn event) {
|
||||
var version = ModList.get().getModFileById(NAMESPACE).versionString();
|
||||
var controlsMode = MidnightControlsConfig.controlsMode.getName();
|
||||
NetworkUtil.sendPayloadC2S(new HelloPayload(version, controlsMode));
|
||||
NetworkUtil.sendPayloadC2S(new ControlsModePayload(controlsMode));
|
||||
}
|
||||
@SubscribeEvent
|
||||
public static void onDisconnect(ClientPlayerNetworkEvent.LoggingOut event) {
|
||||
MidnightControlsClient.onLeave();
|
||||
}
|
||||
@SubscribeEvent
|
||||
public static void startClientTick(ClientTickEvent.Pre event) {
|
||||
MidnightControlsClient.onTick(client);
|
||||
}
|
||||
@SubscribeEvent
|
||||
public static void onScreenOpen(ScreenEvent.Opening event) {
|
||||
MidnightControlsClient.onScreenOpen(event.getNewScreen());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
package eu.midnightdust.midnightcontrols.neoforge;
|
||||
|
||||
import eu.midnightdust.midnightcontrols.MidnightControls;
|
||||
import eu.midnightdust.midnightcontrols.client.MidnightControlsClient;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
import net.neoforged.fml.common.Mod;
|
||||
|
||||
import static eu.midnightdust.midnightcontrols.MidnightControlsConstants.NAMESPACE;
|
||||
|
||||
@Mod(value = NAMESPACE)
|
||||
public class MidnightControlsNeoForge {
|
||||
public MidnightControlsNeoForge() {
|
||||
MidnightControls.init();
|
||||
}
|
||||
|
||||
@Mod(value = NAMESPACE, dist = Dist.CLIENT)
|
||||
public static class YourModClientNeoforge {
|
||||
public YourModClientNeoforge() {
|
||||
MidnightControlsClient.initClient();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package eu.midnightdust.midnightcontrols.neoforge;
|
||||
|
||||
import eu.midnightdust.midnightcontrols.ControlsMode;
|
||||
import eu.midnightdust.midnightcontrols.MidnightControls;
|
||||
import eu.midnightdust.midnightcontrols.MidnightControlsFeature;
|
||||
import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig;
|
||||
import eu.midnightdust.midnightcontrols.neoforge.event.PlayerChangeControlsModeEvent;
|
||||
import eu.midnightdust.midnightcontrols.packet.ControlsModePayload;
|
||||
import eu.midnightdust.midnightcontrols.packet.FeaturePayload;
|
||||
import eu.midnightdust.midnightcontrols.packet.HelloPayload;
|
||||
import net.minecraft.network.packet.c2s.common.CustomPayloadC2SPacket;
|
||||
import net.minecraft.network.packet.s2c.common.CustomPayloadS2CPacket;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.fml.common.Mod;
|
||||
import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent;
|
||||
import net.neoforged.neoforge.network.registration.PayloadRegistrar;
|
||||
|
||||
import static eu.midnightdust.midnightcontrols.MidnightControlsConstants.NAMESPACE;
|
||||
|
||||
@Mod(value = NAMESPACE)
|
||||
public class MidnightControlsNeoforge {
|
||||
public MidnightControlsNeoforge() {
|
||||
MidnightControls.init();
|
||||
}
|
||||
@EventBusSubscriber(modid = NAMESPACE, bus = EventBusSubscriber.Bus.MOD)
|
||||
public class CommonEvents {
|
||||
@SubscribeEvent
|
||||
public static void registerPayloads(RegisterPayloadHandlersEvent event) {
|
||||
PayloadRegistrar registrar = event.registrar("1");
|
||||
registrar.playToServer(HelloPayload.PACKET_ID, HelloPayload.codec, (payload, context) -> {
|
||||
ControlsMode.byId(payload.controlsMode()).ifPresent(controlsMode -> new PlayerChangeControlsModeEvent(context.player(), controlsMode));
|
||||
context.connection().send(new CustomPayloadS2CPacket(new FeaturePayload(MidnightControlsFeature.HORIZONTAL_REACHAROUND)));
|
||||
});
|
||||
registrar.playBidirectional(ControlsModePayload.PACKET_ID, ControlsModePayload.codec, (payload, context) -> {
|
||||
if (context.flow().isServerbound()) ControlsMode.byId(payload.controlsMode()).ifPresent(controlsMode -> new PlayerChangeControlsModeEvent(context.player(), controlsMode));
|
||||
else context.connection().send(new CustomPayloadC2SPacket(new ControlsModePayload(MidnightControlsConfig.controlsMode.getName())));
|
||||
});
|
||||
registrar.playToClient(FeaturePayload.PACKET_ID, FeaturePayload.codec, (payload, context) -> {});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package eu.midnightdust.midnightcontrols.neoforge.event;
|
||||
|
||||
import eu.midnightdust.midnightcontrols.ControlsMode;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.neoforged.bus.api.Event;
|
||||
import net.neoforged.fml.event.IModBusEvent;
|
||||
|
||||
public class PlayerChangeControlsModeEvent extends Event implements IModBusEvent {
|
||||
public PlayerChangeControlsModeEvent(PlayerEntity player, ControlsMode controlsMode) {
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user