Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

Hi,

I'm trying to make a custom boat, however, I'm stuck on how to proceed.

I know that the boat's custom class should extend .entity.vehicle.Boat, however, it seems that there's an Enum in that class that would be difficult to add another element to; overriding the enum doesn't seem to work, either, as several parts of it specifically require the Boat class.

Here's the code of the related files:

entity/custom/ModBoatEntity.java:

package com.realicraft.charlogs.block.entity.custom;

import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.vehicle.Boat;
import net.minecraft.world.level.Level;

public class ModBoatEntity extends Boat {
    public ModBoatEntity(EntityType<? extends Boat> p_38290_, Level p_38291_) {
        super(p_38290_, p_38291_);
    }


}

item/ModItems.java:

package com.realicraft.charlogs.item;

import com.realicraft.charlogs.block.ModBlocks;
import com.realicraft.charlogs.charLogs;
import net.minecraft.world.entity.vehicle.Boat;
import net.minecraft.world.item.BoatItem;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.SignItem;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;

public class ModItems {
    public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, charLogs.MODID);

    public static final RegistryObject<Item> CHAR_SIGN = ITEMS.register("char_sign",
            () -> new SignItem(new Item.Properties().tab(ModCreativeModeTab.CHARLOGS_TAB).stacksTo(16),
            ModBlocks.CHAR_SIGN.get(), ModBlocks.CHAR_WALL_SIGN.get()));

    public static final RegistryObject<Item> CHAR_BOAT = ITEMS.register("char_boat", () -> new BoatItem(false, Boat.Type.OAK, (new Item.Properties()).stacksTo(1).tab(ModCreativeModeTab.CHARLOGS_TAB)));

    public static void register(IEventBus eventBus) {
        ITEMS.register(eventBus);
    }
}

 

You shouldn't expect that vanilla classes are designed to be reused by modders.

There can be lots of hardcoding done by Mojang that makes this difficult or sometimes impossible.

 

You can just set it to OAK like you are doing and then just ignore it.

You are going to need to override those the methods that use that enum anyway such as BoatRenderer.getModelLocation() and Boat.getDropItem()

But I don't think you can reuse BoatItem as is anyway. It has a private method getBoat() that hard codes the entity creation as either Boat or ChestBoat.

You might be able to use access transformers to make that method protected and override it in a subclass?

https://forge.gemwire.uk/wiki/Access_Transformers

 

You should also be aware that Mojang are probably changing this code when they add bamboo rafts in 1.19.3?

 

Boilerplate:

If you don't post your logs/debug.log we can't help you. For curseforge you need to enable the forge debug.log in its minecraft settings. You should also post your crash report if you have one.

If there is no error in the log file and you don't have a crash report then post the launcher_log.txt from the minecraft folder. Again for curseforge this will be in your curseforge/minecraft/Install

Large files should be posted to a file sharing site like https://gist.github.com  You should also read the support forum sticky post.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

Important Information

By using this site, you agree to our Terms of Use.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.