Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Attachments are not synced on player creation

Aperta
#261 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
38/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
java
Ambito
backend

Direzione di ricerca

The issue includes a Fabric mod initializer and attachment setup, but names no ForgifiedFabricAPI source files or tests. Start by tracing attachment synchronization during player creation and compare it with the working setAttached/removeAttached path. Done means the client receives the attachment after join, respawn, and dimension changes on NeoForge with Connector and FFAPI.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

1.21.x bug
Minecraft version

1.21.1

Describe the bug

When a new player is created, e.g. upon join, dimension change, or respawn, attachments are not synced. Attachments do sync properly when setAttached/removeAttached is called.

Steps to reproduce
  1. Create a fabric mod with the following mod initializer
@SuppressWarnings("UnstableApiUsage")
public class BugDemo implements ModInitializer {
	public static final String MOD_ID = "bugdemo";

	public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);

	public static final AttachmentType<Unit> TEST = AttachmentRegistry.create(ResourceLocation.fromNamespaceAndPath(MOD_ID, "test"), builder -> builder
			.persistent(Unit.CODEC)
			.syncWith(StreamCodec.unit(Unit.INSTANCE), AttachmentSyncPredicate.targetOnly())
			.copyOnDeath()
	);

	@Override
	public void onInitialize() {
		UseItemCallback.EVENT.register((player, world, hand) -> {
			var stack = player.getItemInHand(hand);

			if (stack.is(Items.BLAZE_ROD)) {
				if (world.isClientSide()) return InteractionResultHolder.success(stack);

				player.setAttached(TEST, Unit.INSTANCE);

				return InteractionResultHolder.success(stack);
			}

			if (stack.is(Items.STICK)) {
                LOGGER.info(
                        "{} {} attachment",
                        world.isClientSide() ? "client" : "server",
                        player.hasAttached(TEST) ? "has" : "does not have"
                );
                return InteractionResultHolder.success(stack);
            }

			return InteractionResultHolder.pass(stack);
        });
	}
}
  1. Run the mod on fabric.
  2. Use the blaze rod to set the attachment.
  3. Recreate the player by relogging, respawning, or changing dimensions.
  4. Use the stick. The log will show
[17:06:29] [Render thread/INFO] (bugdemo) client has attachment
[17:06:29] [Server thread/INFO] (bugdemo) server has attachment
  1. Run the mod on neoforge with connector & ffapi.
  2. Repeat steps 3-5. The log will show
[17:13:56] [Render thread/INFO] [bugdemo/]: client does not have attachment
[17:13:56] [Server thread/INFO] [bugdemo/]: server has attachment
  1. Use the blaze rod to re-set the attachment, then use the stick. The log will show
[17:18:53] [Render thread/INFO] [bugdemo/]: client has attachment
[17:18:53] [Server thread/INFO] [bugdemo/]: server has attachment

The expected behavior is that when the player is recreated, the server and client will both see the attachment.

Logs

No response

Additional context

Possibly related to FFAPI 2.2.0 using neoforge api for attachment sync.

Lingua principale
Java
Stelle
181
Fork
41
Merge medio
10g 5h
PR unite (30g)
2

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di Sinytra/ForgifiedFabricAPI

Tutte le issue di Sinytra/ForgifiedFabricAPI

Issue simili

Altre issue su Java

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.