- 30
- 6
Всем привет, как правильно заспавнить моба (существующего)?
это понятно, я пробовал делал таким способом, но получал краш. можешь привести пример, если не сложно?world.spawnEntity(entityIn)
EntityZombie zombie = new EntityZombie(world);
zombie.setPositionAndUpdate(x, y, z);
world.spawnEntityInWorld(zombie);
java.lang.NullPointerException: Exception ticking worldСкинь CrashLog
com.xmafee.aide.EventHandler.onSpawnEntity(EventHandler.java:84)
Тут у тебя null, скинь участок кода
@SubscribeEvent
public void onSpawnEntity(LivingSpawnEvent e) {
if(Keyboard.isKeyDown(Keyboard.KEY_H)) {
EntityZombie zombie = new EntityZombie(world);
int pX = player.serverPosX, pY = player.serverPosY, pZ = player.serverPosZ;
zombie.setPosition(pX + 1, pY, pZ);
world.spawnEntityInWorld(zombie);
}
}
Попрошу весь класс
public class EventHandler {
Minecraft mc;
EntityPlayer player;
World world;
@SubscribeEvent
public void onSpawnEntity(LivingSpawnEvent e) {
if(Keyboard.isKeyDown(Keyboard.KEY_H)) {
EntityZombie zombie = new EntityZombie(world);
int pX = player.serverPosX, pY = player.serverPosY, pZ = player.serverPosZ;
zombie.setPosition(pX + 1, pY, pZ);
world.spawnEntityInWorld(zombie);
}
}
}
package com.xmafee.aide;
import java.awt.Color;
import java.util.ArrayList;
import org.lwjgl.input.Keyboard;
import com.xmafee.entities.EntityLayout;
import com.xmafee.gui.CustomGuiChest;
import com.xmafee.gui.CustomGuiMainMenu;
import com.xmafee.network.NetworkHandler;
import com.xmafee.packets.client.CPacketParticles;
import com.xmafee.packets.server.SPacketParticles;
import com.xmafee.storages.StorageKeys;
import cpw.mods.fml.common.eventhandler.EventPriority;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.InputEvent;
import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent.ItemPickupEvent;
import cpw.mods.fml.common.gameevent.TickEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityClientPlayerMP;
import net.minecraft.client.gui.GuiMainMenu;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.inventory.GuiChest;
import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.passive.EntityPig;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.DamageSource;
import net.minecraft.util.IChatComponent;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.StatCollector;
import net.minecraft.util.Vec3;
import net.minecraft.util.MovingObjectPosition.MovingObjectType;
import net.minecraft.world.World;
import net.minecraftforge.client.GuiIngameForge;
import net.minecraftforge.client.event.ClientChatReceivedEvent;
import net.minecraftforge.client.event.DrawBlockHighlightEvent;
import net.minecraftforge.client.event.GuiOpenEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
import net.minecraftforge.client.event.RenderItemInFrameEvent;
import net.minecraftforge.client.event.RenderLivingEvent;
import net.minecraftforge.client.event.RenderWorldLastEvent;
import net.minecraftforge.event.entity.living.LivingAttackEvent;
import net.minecraftforge.event.entity.living.LivingSpawnEvent;
import net.minecraftforge.event.entity.player.AttackEntityEvent;
import net.minecraftforge.event.entity.player.EntityItemPickupEvent;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.event.world.ChunkEvent;
import net.minecraftforge.event.world.WorldEvent;
public class EventHandler {
Minecraft mc;
EntityPlayer player;
World world;
private boolean survivalMode() {
return Minecraft.getMinecraft().thePlayer.capabilities.isCreativeMode == false;
}
@SubscribeEvent
public void onSpawnEntity(LivingSpawnEvent e) {
if(Keyboard.isKeyDown(Keyboard.KEY_H)) {
EntityZombie zombie = new EntityZombie(world);
int pX = player.serverPosX, pY = player.serverPosY, pZ = player.serverPosZ;
zombie.setPosition(pX + 1, pY, pZ);
world.spawnEntityInWorld(zombie);
}
}
@SubscribeEvent
public void onPlaceBlock(BlockEvent.PlaceEvent e) {
if(world.isRemote == false)
if (survivalMode())
e.setCanceled(true);
}
@SubscribeEvent
public void onBreakBlock(BlockEvent.BreakEvent e) {
if(world.isRemote == false)
if (survivalMode())
e.setCanceled(true);
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public void onOpenMainMenuGui(GuiOpenEvent e) {
if (e.gui instanceof GuiMainMenu)
e.gui = (GuiScreen)new CustomGuiMainMenu();
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public void onRenderDebug(RenderGameOverlayEvent e) {
if (e.type == ElementType.DEBUG)
e.setCanceled(true);
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public void onDrawBlockHighlight(DrawBlockHighlightEvent e) {
if (survivalMode())
e.setCanceled(true);
}
}
я делаю это для тестана сервере клавиатуры клиента нету.
@SubscribeEvent
public void onBreakBlock(BlockEvent.BreakEvent e) {
if(e.world.isRemote == false) {
EntityZombie zombie = new EntityZombie(e.world);
int pX = player.serverPosX, pY = player.serverPosY, pZ = player.serverPosZ;
zombie.setPosition(pX + 1, pY, pZ);
e.world.spawnEntityInWorld(zombie);
}
}
EntityPlayer player = Minecraft.getMinecraft().thePlayer;EntityPlayer player = Minecraft.getInstance().player
Попробуй:та нет, теперь просто блок рушиться, краша нет, но энтити не спавниться
zombie.setPositionAndUpdate(x, y, z);