package com.joy187.re8joymod.common.init;
import com.joy187.re8joymod.Utils;
import com.joy187.re8joymod.common.entity.*;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityClassification;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.passive.PigEntity;
import net.minecraft.entity.projectile.AbstractArrowEntity;
import net.minecraft.entity.projectile.ArrowEntity;
import net.minecraft.entity.projectile.SpectralArrowEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
public class EntityInit {
public static final DeferredRegister<EntityType<?>> ENTITY_TYPES = DeferredRegister.create(ForgeRegistries.ENTITIES,
Utils.MOD_ID);
//我们的车辆
public static final RegistryObject<EntityType<HeisenCarEntity>> HEISENCAR = ENTITY_TYPES.register("heisencar",
() -> EntityType.Builder.of(HeisenCarEntity::new, EntityClassification.MISC).sized(2f,0.8f).setTrackingRange(30)
.build(new ResourceLocation(Utils.MOD_ID, "heisencar").toString()));
//其他的生物实体也在这里
// public static final RegistryObject<EntityType<EntityRose>> ROSE = ENTITY_TYPES.register("rose",
// () -> EntityType.Builder.of(EntityRose::new, EntityClassification.MONSTER).sized(2f,0.8f).setTrackingRange(30)
// .build(new ResourceLocation(Utils.MOD_ID, "rose").toString()));
}
3.新建一个渲染类RenderHeisenCar.java用于车辆在游戏中的模型渲染:
package com.joy187.re8joymod.common.entity.render;
import com.joy187.re8joymod.Utils;
import com.joy187.re8joymod.common.entity.HeisenCarEntity;
import com.joy187.re8joymod.common.entity.model.ModelHeisenCar;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.entity.MobRenderer;
import net.minecraft.util.ResourceLocation;
public class RenderHeisenCar extends MobRenderer<HeisenCarEntity, ModelHeisenCar<HeisenCarEntity>> {
public static final ResourceLocation TEXTURE = new ResourceLocation(Utils.MOD_ID, "textures/entity/heisenberg2.png");
public RenderHeisenCar(EntityRendererManager manager) {
super(manager, new ModelHeisenCar<HeisenCarEntity>(), 0.7f);
}
@Override
public ResourceLocation getTextureLocation(HeisenCarEntity p_110775_1_) {
return TEXTURE;
}
}
新建一个ClientModEventSubscriber.java文件用于对渲染文件进行处理
package com.joy187.re8joymod.common;
import com.joy187.re8joymod.Utils;
import com.joy187.re8joymod.common.entity.render.*;
import com.joy187.re8joymod.common.init.EntityInit;
import com.joy187.re8joymod.common.init.ModItems;
import com.joy187.re8joymod.common.items.ItemGM79B;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.entity.SpriteRenderer;
import net.minecraftforge.fml.client.registry.RenderingRegistry;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import net.minecraft.client.gui.ScreenManager;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
/**
* Subscribe to events from the MOD EventBus that should be handled on the PHYSICAL CLIENT side in this class
*
* @author Sinhika
*/
@EventBusSubscriber(modid= Utils.MOD_ID, bus=EventBusSubscriber.Bus.MOD, value=Dist.CLIENT)
public class ClientModEventSubscriber
{
private static final Logger LOGGER = LogManager.getLogger(Utils.MOD_ID + " Client Mod Event Subscriber");
/**
* We need to register our renderers on the client because rendering code does not exist on the server
* and trying to use it on a dedicated server will crash the game.
* <p>
* This method will be called by Forge when it is time for the mod to do its client-side setup
* This method will always be called after the Registry events.
* This means that all Blocks, Items, TileEntityTypes, etc. will all have been registered already
*/
//将我们的载具渲染在这个函数中调用
@SubscribeEvent
public static void onFMLClientSetupEvent(final FMLClientSetupEvent event)
{
RenderingRegistry.registerEntityRenderingHandler(EntityInit.HEISENCAR.get(), RenderHeisenCar::new);
}
} // end class
package com.joy187.re8joymod.common.items;
import com.joy187.re8joymod.common.entity.EntityDoll1;
import com.joy187.re8joymod.common.entity.EntityGM79B;
import com.joy187.re8joymod.common.entity.HeisenCarEntity;
import com.joy187.re8joymod.common.init.EntityInit;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.IItemTier;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.EffectInstance;
import net.minecraft.potion.Effects;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.world.World;
import java.util.Random;
public class ItemVehicleCore extends ItemPickaxe {
public ItemVehicleCore(IItemTier toolMaterial, int attackDamage, float attackSpeed, Properties itemProperties) {
super(toolMaterial,attackDamage, attackSpeed, itemProperties);
}
@Override //这里我们设置按右键就可以召唤我们的载具
public ActionResult<ItemStack> use(World p_77659_1_, PlayerEntity p_77659_2_, Hand p_77659_3_) {
ItemStack itemstack = p_77659_2_.getItemInHand(p_77659_3_);
//生成我们的载具
HeisenCarEntity e = new HeisenCarEntity(EntityInit.HEISENCAR.get(), p_77659_2_.level);
e.setPos(p_77659_2_.position().x,p_77659_2_.position().y,p_77659_2_.position().z);
p_77659_2_.level.addFreshEntity(e);
if (!p_77659_2_.abilities.instabuild) {
itemstack.shrink(10000);
if (itemstack.isEmpty()) {
p_77659_2_.inventory.removeItem(itemstack);
}
}
return ActionResult.success(itemstack);
}
}
在ItemInit中声明该物品:
public static final RegistryObject<ItemPickaxe> HCKEY = ITEMS.register("vehicle_core",
() -> new ItemVehicleCore(CustomItemTier.TOOL_KEY3,2,-1.5F,new Item.Properties().tab(RegistryEvents.RE8GROUP)));