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));
});
}
}
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);
}
}
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...");
}
}
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