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
类,您的大多数块都扩展了这个类(或者就是这个类)。这是另一种反模式:使用继承进行代码重用net.Minecraft
,因为他们拥有Minecraft.net!)您应该使用mod
而不是com
或将其全部忽略CommonProxy
类。这太愚蠢了。通用代码可以放在您的主mod类中。代理系统的整个要点是区分客户端和服务器,并允许只在一端调用的代码在一端调用,而不会使用未知引用使另一端崩溃。通用代码可以去任何地方,它不需要代理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
类,您的大多数块都扩展了这个类(或者就是这个类)。这是另一种反模式:使用继承进行代码重用net.Minecraft
,因为他们拥有Minecraft.net!)您应该使用mod
而不是com
或将其全部忽略CommonProxy
类。这太愚蠢了。通用代码可以放在您的主mod类中。代理系统的整个要点是区分客户端和服务器,并允许只在一端调用的代码在一端调用,而不会使用未知引用使另一端崩溃。通用代码可以去任何地方,它不需要代理代码:请解释您尝试了什么,遇到了什么问题。问题太模糊了。我认为您需要生成一个
ExplosionEvent
,注册它,然后调用ExplosionEvent.start()
@sorifiend,这样做是错误的。事件是“我做了一件事!(有人想知道和/或修改它吗?)“不是”系统:做那件事。“代码:请解释你做了什么,遇到了什么问题。”。问题太模糊了。我认为您需要生成一个ExplosionEvent
,注册它,然后调用ExplosionEvent.start()
@sorifiend,这样做是错误的。事件是“我做了一件事!(有人想知道和/或修改它吗?)”而不是“系统:做这件事。”