Minecraft Fabric Mod animiert keinen benutzerdefinierten KompassJava

Java-Forum
Guest
 Minecraft Fabric Mod animiert keinen benutzerdefinierten Kompass

Post by Guest »

Ich bin neu in Minecraft Mod und Java Development und ich habe Chatgpt verwendet, um es zu lernen. Ich versuche, einen Mod zu bauen, der einen Kompass bietet, der auf den nächsten Diamanterzblock hinweist. Ich bin relativ weit gekommen, ich kann in den Protokollen meines Mods sehen, dass die Richtung zum nächsten Diamanterz protokolliert wird. Der Diamantkompass ist jedoch nicht animiert. < /P>
Ich werde meinen gesamten Code veröffentlichen. Kann jemand darauf hinweisen, warum die Animation möglicherweise fehlschlägt?

Code: Select all

package com.ferndale;

import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroups;
import net.minecraft.item.ItemStack;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier;

public class FerndaleMod implements ModInitializer {
public static final String MOD_ID = "ferndale";

// Register the Diamond Compass item
public static final Item DIAMOND_COMPASS = new Item(new Item.Settings());

@Override
public void onInitialize() {
System.out.println("[🔧 DEBUG] Ferndale Mod Loaded!");

// Register the Diamond Compass in the game
Registry.register(Registries.ITEM, new Identifier(MOD_ID, "diamond_compass"), DIAMOND_COMPASS);

// Add to the Tools & Utilities Creative Tab
ItemGroupEvents.modifyEntriesEvent(ItemGroups.TOOLS).register(entries -> {
entries.add(new ItemStack(DIAMOND_COMPASS));
});
}
}
DiamondCompassItem.java

Code: Select all

package com.ferndale;

import net.minecraft.client.item.TooltipContext;
import net.minecraft.item.CompassItem;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.text.Text;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import org.jetbrains.annotations.Nullable;

import java.util.List;

public class DiamondCompassItem extends CompassItem {
public DiamondCompassItem(Settings settings) {
super(settings);
}

public static void setLodestonePos(ItemStack stack, BlockPos pos) {
NbtCompound nbt = stack.getOrCreateNbt();
nbt.putInt("LodestoneX", pos.getX());
nbt.putInt("LodestoneY", pos.getY());
nbt.putInt("LodestoneZ", pos.getZ());
}

@Override
public void appendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) {
if (stack.hasNbt() && stack.getNbt() != null) {
NbtCompound nbt = stack.getNbt();
if (nbt.contains("LodestoneX") && nbt.contains("LodestoneY") && nbt.contains("LodestoneZ")) {
tooltip.add(Text.of("Pointing to: " +
nbt.getInt("LodestoneX") + ", " +
nbt.getInt("LodestoneY") + ", "  +
nbt.getInt("LodestoneZ")));
} else {
tooltip.add(Text.of("Not pointing to anything."));
}
}
super.appendTooltip(stack, world, tooltip, context);
}
}
ModItems.java

Code: Select all

package com.ferndale;

import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.minecraft.item.CompassItem;
import net.minecraft.item.Item;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier;

public class ModItems {
public static final Item DIAMOND_COMPASS = registerItem("diamond_compass",
new CompassItem(new FabricItemSettings().maxCount(1)));

private static Item registerItem(String name, Item item) {
return Registry.register(Registries.ITEM, new Identifier("ferndale", name), item);
}

public static void registerModItems() {
System.out.println("Registering Mod Items for Ferndale...");
}
}
DiamondCompassTracker.java

Code: Select all

package com.ferndale;

import net.minecraft.block.Blocks;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;

public class DiamondCompassTracker {
public static float calculateAngle(ItemStack stack, World world, PlayerEntity player) {
BlockPos nearestDiamond = findNearestDiamond(player, world);
if (nearestDiamond == null) {
return 0.0f;
}

return getCompassAngle(player, nearestDiamond);
}

private static BlockPos findNearestDiamond(PlayerEntity player, World world) {
BlockPos playerPos = player.getBlockPos();
BlockPos nearestDiamond = null;
double nearestDistance = Double.MAX_VALUE;

int radius = 50;  // Search range
for (int x = -radius; x

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post