endcity
本帖最后由 endcity 于 2021-8-13 16:58 编辑

方块setSoundType时报错:'setSoundType(net.minecraft.block.SoundType)' has protected access in 'net.minecraft.block.Block'

全部代码:
  1. package block;

  2. import net.minecraft.block.Block;
  3. import net.minecraft.block.SoundType;
  4. import net.minecraft.block.material.Material;
  5. import net.minecraft.block.state.IBlockState;
  6. import net.minecraft.client.renderer.block.model.ModelResourceLocation;
  7. import net.minecraft.entity.player.EntityPlayer;
  8. import net.minecraft.item.Item;
  9. import net.minecraft.item.ItemBlock;
  10. import net.minecraft.item.ItemStack;
  11. import net.minecraft.util.EnumHand;
  12. import net.minecraft.util.math.BlockPos;
  13. import net.minecraft.world.World;
  14. import net.minecraftforge.client.event.ModelRegistryEvent;
  15. import net.minecraftforge.client.model.ModelLoader;
  16. import net.minecraftforge.event.RegistryEvent;
  17. import net.minecraftforge.fml.common.Mod;
  18. import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
  19. import net.minecraftforge.fml.relauncher.Side;

  20. import static item.CreativeTab.THE_FORGOTTEN;

  21. @Mod.EventBusSubscriber(value = Side.CLIENT,modid = "the_forgotten")
  22. public class mysterious_stone {
  23.     public static Block Mysterious_Stone;

  24.     @SubscribeEvent
  25.     public static void registerBlock(RegistryEvent.Register<Block> event) {
  26.         event.getRegistry().register(
  27.                 Mysterious_Stone = new Block(Material.ROCK)
  28.                 .setCreativeTab(THE_FORGOTTEN)
  29.                 .setUnlocalizedName("the_forgotten.Mysterious_Stone")
  30.                 .setRegistryName("the_forgotten:mysterious_stone")
  31.                 .setHardness(1.5f)
  32.                 .setResistance(10.0f)
  33.                 .setSoundType(SoundType.STONE)
  34.                 .setHarvestLevel("pickaxe",0)
  35.         );
  36.     }
  37.     @SubscribeEvent
  38.     public static void registerItems(RegistryEvent.Register<Item> event) {
  39.         event.getRegistry().register(
  40.                 new ItemBlock(Mysterious_Stone).setRegistryName("the_forgotten:mysterious_stone")
  41.         );
  42.     }

  43.     @Mod.EventBusSubscriber(value = Side.CLIENT,modid = "the_forgotten")
  44.     public static final class ModelMapper {
  45.         @SubscribeEvent
  46.         public static void onModelReg(ModelRegistryEvent event) {
  47.             ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(Mysterious_Stone), 0, new ModelResourceLocation(Mysterious_Stone.getRegistryName(), "inventory"));
  48.         }
  49.     }
  50.     public void onBlockHarvested(EntityPlayer player) {
  51.         ItemStack stack = player.getHeldItem(EnumHand.MAIN_HAND);
  52.         stack.damageItem(2, player);
  53.         }
  54.     }
复制代码

白色的小熊
你中间的代码点之前不需要加东西吗?这样写不是错的吗?setSoundType翻译过来是设置声音类型,不过这个不需要新建一个ItemStack吗?只有有了对象才能设置声音类型,这个声音类型是方块被破坏产生的声音?

William_Shi
白色的小熊 发表于 2021-8-11 22:58
你中间的代码点之前不需要加东西吗?这样写不是错的吗?setSoundType翻译过来是设置声音类型,不过这个不需 ...


你中间的代码点之前不需要加东西吗?这样写不是错的吗?


您仔细看一下代码

  1.         event.getRegistry().register(
  2.                 Mysterious_Stone = new Block(Material.ROCK)
  3.                 .setCreativeTab(THE_FORGOTTEN)
  4.                 .setUnlocalizedName("the_forgotten.Mysterious_Stone")
  5.                 .setRegistryName("the_forgotten:mysterious_stone")
  6.                 .setHardness(1.5f)
  7.                 .setResistance(10.0f)
  8.                 .setSoundType(SoundType.STONE)
  9.                 .setHarvestLevel("pickaxe",0)
  10.         );
复制代码

自行百度 “Java 链式”。

白色的小熊
William_Shi 发表于 2021-8-12 09:20
您仔细看一下代码

自行百度 “Java 链式”。

就是链式编程点前面也得加东西吧?链式编程是指的
返回一个this对象,就是返回本身,达到链式效果。

William_Shi
白色的小熊 发表于 2021-8-13 15:44
就是链式编程点前面也得加东西吧?链式编程是指的
就是链式编程点前面也得加东西吧?


你能不能自己去找几个链式编程的实际例子看一看!自己测试一下!

Mysterious_Stone = new Block(Material.ROCK)
                .setCreativeTab(THE_FORGOTTEN)
                .setUnlocalizedName("the_forgotten.Mysterious_Stone")
这个链式,和
Mysterious_Stone = new Block(Material.ROCK).setCreativeTab(THE_FORGOTTEN).setUnlocalizedName("the_forgotten.Mysterious_Stone")

是等价的,只是在调用方法的时候换了个行而已。
你能不能先学学 Java 再来发表自己的观点?你引用的这句话“返回一个this对象,就是返回本身,达到链式效果。”你真的理解了吗?