Java 如何使用OneTityCollideWithBlock使块召唤爆炸?布雷艇改装

Java 如何使用OneTityCollideWithBlock使块召唤爆炸?布雷艇改装,java,minecraft,minecraft-forge,Java,Minecraft,Minecraft Forge,当玩家或暴徒与我的街区相撞时,我试图让我的街区召唤爆炸。到目前为止,我可以让它伤害它们,但不会引发爆炸。有人知道怎么做吗 这是我的密码: package com.icearrow26.moreapples.blocks; import com.icearrow26.moreapples.Main; import com.icearrow26.moreapples.init.ModBlocks; import com.icearrow26.moreapples.init.ModItems; im

当玩家或暴徒与我的街区相撞时,我试图让我的街区召唤爆炸。到目前为止,我可以让它伤害它们,但不会引发爆炸。有人知道怎么做吗

这是我的密码:

package com.icearrow26.moreapples.blocks;

import com.icearrow26.moreapples.Main;
import com.icearrow26.moreapples.init.ModBlocks;
import com.icearrow26.moreapples.init.ModItems;
import com.icearrow26.moreapples.util.Interfaces.IHasModel;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.util.DamageSource;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.eventhandler.Event;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

public class TNTBase extends Block implements IHasModel{
    public TNTBase(String name, Material material)
    {
        super(material);
        setUnlocalizedName(name);
        setRegistryName(name);
        setCreativeTab(CreativeTabs.BUILDING_BLOCKS);

        ModBlocks.BLOCKS.add(this);
        ModItems.ITEMS.add(new ItemBlock(this).setRegistryName(this.getRegistryName()));
    }

    @Override
    public void registerModels() {
        Main.proxy.registerItemRenderer(Item.getItemFromBlock(this), 0, "inventory");

    }
    public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn)
    {
        entityIn.attackEntityFrom(DamageSource.IN_WALL, 1.0F);
    }
}
第一步:总是问自己“香草有这样的作用吗?” 在这种情况下,香草制造爆炸。不是当一个实体与一个块发生碰撞时,而是当它发生碰撞时,而不是它如何发生碰撞时。在本例中,
entitytntpromed
是我们想要的类

我们在其中发现了这种方法:

private void explode()
{
    float f = 4.0F;
    this.world.createExplosion(this, this.posX, this.posY + (double)(this.height / 16.0F), this.posZ, 4.0F, true);
}
瞧。现在我们知道如何制造爆炸。复制、粘贴、调用我们希望发生的事情。不需要第2步

现在,还有一些事情。。。 这些是我一直看到的常见问题,也应该予以纠正

  • IHasModel
    很愚蠢所有项目都需要模型,注册模型所需的所有信息都是公开的。使用这样的界面是一种反模式,您是从Youtube教程中选择的,这是一种实践。你根本不需要它。只需在
    ModelRegistryEvent
    处理程序中直接调用
    ModelLoader.registerCustomModel()
    • “我需要通过我的代理!”你说。您的
      ModelRegistryEvent
      处理程序应该已经位于客户端代理中。
      ModelRegistryEvent
      类仅用于客户端
    • 我甚至可以告诉你你看了什么YT视频,并将你直接链接到我的评论,告诉它的作者,
      IHasModel
      是愚蠢的。如果我错了,我会去发表评论
  • TNTBase
    告诉我您还有一个
    BlockBase
    类,您的大多数块都扩展了这个类(或者就是这个类)。这是另一种反模式:使用继承进行代码重用
  • 您不拥有icearrow26.com,因此您不应该将其用作包标识符(Minecraft使用
    net.Minecraft
    ,因为他们拥有Minecraft.net!)您应该使用
    mod
    而不是
    com
    或将其全部忽略
  • 您几乎肯定有一个
    CommonProxy
    类。这太愚蠢了。通用代码可以放在您的主mod类中。代理系统的整个要点是区分客户端和服务器,并允许只在一端调用的代码在一端调用,而不会使用未知引用使另一端崩溃。通用代码可以去任何地方,它不需要代理
  • 第1步:总是问自己“香草有这样的作用吗?” 在这种情况下,香草制造爆炸。不是当一个实体与一个块发生碰撞时,而是当它发生碰撞时,而不是它如何发生碰撞时。在本例中,
    entitytntpromed
    是我们想要的类

    我们在其中发现了这种方法:

    private void explode()
    {
        float f = 4.0F;
        this.world.createExplosion(this, this.posX, this.posY + (double)(this.height / 16.0F), this.posZ, 4.0F, true);
    }
    
    瞧。现在我们知道如何制造爆炸。复制、粘贴、调用我们希望发生的事情。不需要第2步

    现在,还有一些事情。。。 这些是我一直看到的常见问题,也应该予以纠正

  • IHasModel
    很愚蠢所有项目都需要模型,注册模型所需的所有信息都是公开的。使用这样的界面是一种反模式,您是从Youtube教程中选择的,这是一种实践。你根本不需要它。只需在
    ModelRegistryEvent
    处理程序中直接调用
    ModelLoader.registerCustomModel()
    • “我需要通过我的代理!”你说。您的
      ModelRegistryEvent
      处理程序应该已经位于客户端代理中。
      ModelRegistryEvent
      类仅用于客户端
    • 我甚至可以告诉你你看了什么YT视频,并将你直接链接到我的评论,告诉它的作者,
      IHasModel
      是愚蠢的。如果我错了,我会去发表评论
  • TNTBase
    告诉我您还有一个
    BlockBase
    类,您的大多数块都扩展了这个类(或者就是这个类)。这是另一种反模式:使用继承进行代码重用
  • 您不拥有icearrow26.com,因此您不应该将其用作包标识符(Minecraft使用
    net.Minecraft
    ,因为他们拥有Minecraft.net!)您应该使用
    mod
    而不是
    com
    或将其全部忽略
  • 您几乎肯定有一个
    CommonProxy
    类。这太愚蠢了。通用代码可以放在您的主mod类中。代理系统的整个要点是区分客户端和服务器,并允许只在一端调用的代码在一端调用,而不会使用未知引用使另一端崩溃。通用代码可以去任何地方,它不需要代理

  • 代码:请解释您尝试了什么,遇到了什么问题。问题太模糊了。我认为您需要生成一个
    ExplosionEvent
    ,注册它,然后调用
    ExplosionEvent.start()
    @sorifiend,这样做是错误的。事件是“我做了一件事!(有人想知道和/或修改它吗?)“不是”系统:做那件事。“代码:请解释你做了什么,遇到了什么问题。”。问题太模糊了。我认为您需要生成一个
    ExplosionEvent
    ,注册它,然后调用
    ExplosionEvent.start()
    @sorifiend,这样做是错误的。事件是“我做了一件事!(有人想知道和/或修改它吗?)”而不是“系统:做这件事。”