Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Магия с ведрами | Minecraft Fabric

1 1 Ученик (111), на голосовании 1 месяц назад
Я делаю один мод, и в нем при нажатии кнопки ведро с водой должно превратиться в ведро с вином, предмет из мода.

Но и мое ведро, и ведро с лавой ведут себя одинаково: при размещении жидкости она сразу превращается в воду. Более того, после перезахода ведро снова становится ведром с водой. Вот мой код, у меня уже закончились идеи как это исправить и я отчаялся обратиться сюда
 public void onEndTick(MinecraftClient client) {  

if (JesusClient.transformKey.wasPressed()) {

PlayerEntity player = client.player;

ItemStack itemStack = player.getMainHandStack();

ItemStack newWineStack;



if (itemStack.getItem() == Items.POTION && PotionUtil.getPotion(itemStack) == Potions.WATER) {

newWineStack = new ItemStack(Jesus.WINE_BOTTLE);

} else if (itemStack.getItem() == Items.WATER_BUCKET) {

// Место объявления ItemStack ведра

newWineStack = new ItemStack(Items.LAVA_BUCKET);

} else {

player.sendMessage(Text.translatable("message.transform_impossible").setStyle(Style.EMPTY.withColor(TextColor.fromRgb(0xFF5555))), false);

return;

}



itemStack.decrement(1);

if (!player.getInventory().insertStack(newWineStack)) {

player.dropStack(newWineStack);

}

}

}
Голосование за лучший ответ
XD Знаток (368) 2 месяца назад
попробуй

 // JesusMod.java 
public class JesusMod {
public static final WineBucketItem WINE_BUCKET_ITEM = new WineBucketItem();

@Mod.Init
public void init(FMLInitializationEvent event) {
// Register the custom item
GameRegistry.registerItem(WINE_BUCKET_ITEM, "wine_bucket");
}
}

// WineBucketItem.java
public class WineBucketItem extends Item {
public WineBucketItem() {
super(new Item.Properties().group(ItemGroup.MISC));
}

@Override
public ActionResult onItemUse(ItemStack stack, World world, PlayerEntity player, Hand hand) {
// Handle liquid placement and prevent default behavior
if (!world.isRemote) {
// Check if the player is trying to place a liquid in the bucket
if (player.isHandActive() && player.getActiveHand() == hand) {
// Get the liquid in the bucket
Fluid fluid = FluidRegistry.getFluid("water"); // or "lava" for lava bucket

// Check if the fluid is water or lava
if (fluid != null) {
// Prevent the default behavior of turning the bucket into a water bucket
return ActionResult.SUCCESS;
}
}
}
return super.onItemUse(stack, world, player, hand);
}

@Override
public boolean hasEffect(ItemStack stack) {
return true;
}

@Override
public void onCreated(ItemStack stack, World world, PlayerEntity player) {
// Add a custom NBT tag to mark it as a wine bucket
stack.getOrCreateTag().putBoolean("isWineBucket", true);
}
}

// JesusClient.java
public class JesusClient {
public static final KeyBinding transformKey = new KeyBinding("key.transform", Keyboard.KEY_T, "category.jesus");

@SubscribeEvent
public void onEndTick(TickEvent.ClientTickEvent event) {
if (event.phase == TickEvent.Phase.END) {
if (transformKey.wasPressed()) {
PlayerEntity player = Minecraft.getInstance().player;
ItemStack itemStack = player.getMainHandStack();

if (itemStack.getItem() == Items.WATER_BUCKET) {
// Create a custom wine bucket item instance
ItemStack newWineStack = new ItemStack(JesusMod.WINE_BUCKET_ITEM);

itemStack.decrement(1);
if (!player.getInventory().insertStack(newWineStack)) {
player.dropStack(newWineStack);
}
}
}
}
}
}
Похожие вопросы