Attempted to get mudballs working. Seems entity registration is buggy
This commit is contained in:
parent
a67b28bbd2
commit
75bf89e31f
|
@ -0,0 +1,15 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||||
|
*
|
||||||
|
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||||
|
*
|
||||||
|
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||||
|
******************************************************************************/
|
||||||
|
package biomesoplenty.api.entity;
|
||||||
|
|
||||||
|
import net.minecraft.entity.EntityType;
|
||||||
|
|
||||||
|
public class BOPEntities
|
||||||
|
{
|
||||||
|
public static EntityType<?> mudball;
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||||
|
*
|
||||||
|
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||||
|
*
|
||||||
|
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||||
|
******************************************************************************/
|
||||||
|
package biomesoplenty.common.entity.projectile;
|
||||||
|
|
||||||
|
import biomesoplenty.api.entity.BOPEntities;
|
||||||
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
|
import net.minecraft.entity.projectile.EntityThrowable;
|
||||||
|
import net.minecraft.util.DamageSource;
|
||||||
|
import net.minecraft.util.math.RayTraceResult;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
|
||||||
|
public class EntityMudball extends EntityThrowable
|
||||||
|
{
|
||||||
|
public EntityMudball(World world)
|
||||||
|
{
|
||||||
|
super(BOPEntities.mudball, world);
|
||||||
|
}
|
||||||
|
|
||||||
|
public EntityMudball(double x, double y, double z, World world)
|
||||||
|
{
|
||||||
|
super(BOPEntities.mudball, x, y, z, world);
|
||||||
|
}
|
||||||
|
|
||||||
|
public EntityMudball(World world, EntityLivingBase thrower)
|
||||||
|
{
|
||||||
|
super(BOPEntities.mudball, thrower, world);
|
||||||
|
}
|
||||||
|
|
||||||
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
@Override
|
||||||
|
public void handleStatusUpdate(byte id)
|
||||||
|
{
|
||||||
|
if (id == 3)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 8; ++i)
|
||||||
|
{
|
||||||
|
//BiomesOPlenty.proxy.spawnParticle(BOPParticleTypes.MUD, this.world, this.posX, this.posY, this.posZ);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onImpact(RayTraceResult hit)
|
||||||
|
{
|
||||||
|
if (hit.entity != null)
|
||||||
|
{
|
||||||
|
hit.entity.attackEntityFrom(DamageSource.causeThrownDamage(this, this.getThrower()), 0.0F);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.world.isRemote)
|
||||||
|
{
|
||||||
|
this.world.setEntityState(this, (byte)3);
|
||||||
|
this.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||||
|
*
|
||||||
|
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||||
|
*
|
||||||
|
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||||
|
******************************************************************************/
|
||||||
|
package biomesoplenty.common.item;
|
||||||
|
|
||||||
|
import biomesoplenty.common.entity.projectile.EntityMudball;
|
||||||
|
import biomesoplenty.common.util.inventory.ItemGroupBOP;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.init.SoundEvents;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.stats.StatList;
|
||||||
|
import net.minecraft.util.ActionResult;
|
||||||
|
import net.minecraft.util.EnumActionResult;
|
||||||
|
import net.minecraft.util.EnumHand;
|
||||||
|
import net.minecraft.util.SoundCategory;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
public class ItemMudball extends Item
|
||||||
|
{
|
||||||
|
public ItemMudball()
|
||||||
|
{
|
||||||
|
super(new Item.Builder().group(ItemGroupBOP.instance).maxStackSize(16));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, EnumHand hand)
|
||||||
|
{
|
||||||
|
ItemStack stack = player.getHeldItem(hand);
|
||||||
|
if (!player.abilities.isCreativeMode)
|
||||||
|
{
|
||||||
|
stack.setCount(stack.getCount() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
world.playSound(player, player.getPosition(), SoundEvents.ENTITY_ARROW_SHOOT, SoundCategory.NEUTRAL, 0.5F, 0.4F / (random.nextFloat() * 0.4F + 0.8F));
|
||||||
|
|
||||||
|
if (!world.isRemote)
|
||||||
|
{
|
||||||
|
EntityMudball mudball = new EntityMudball(world, player);
|
||||||
|
mudball.shoot(player, player.rotationPitch, player.rotationYaw, 0.0F, 1.5F, 1.0F);
|
||||||
|
world.spawnEntity(mudball);
|
||||||
|
}
|
||||||
|
|
||||||
|
player.addStat(StatList.ITEM_USED.get(this));
|
||||||
|
return new ActionResult<ItemStack>(EnumActionResult.SUCCESS, stack);
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,9 +9,11 @@
|
||||||
package biomesoplenty.core;
|
package biomesoplenty.core;
|
||||||
|
|
||||||
import biomesoplenty.init.ModBlocks;
|
import biomesoplenty.init.ModBlocks;
|
||||||
|
import biomesoplenty.init.ModEntities;
|
||||||
import biomesoplenty.init.ModItems;
|
import biomesoplenty.init.ModItems;
|
||||||
import biomesoplenty.init.ModSounds;
|
import biomesoplenty.init.ModSounds;
|
||||||
import net.minecraft.init.Bootstrap;
|
import net.minecraft.init.Bootstrap;
|
||||||
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||||
|
@ -23,6 +25,7 @@ public class BiomesOPlenty
|
||||||
public static final String MOD_ID = "biomesoplenty";
|
public static final String MOD_ID = "biomesoplenty";
|
||||||
|
|
||||||
public static BiomesOPlenty instance;
|
public static BiomesOPlenty instance;
|
||||||
|
public static CommonProxy proxy = DistExecutor.runForDist(() -> ClientProxy::new, () -> CommonProxy::new);
|
||||||
|
|
||||||
public BiomesOPlenty()
|
public BiomesOPlenty()
|
||||||
{
|
{
|
||||||
|
@ -32,12 +35,14 @@ public class BiomesOPlenty
|
||||||
FMLModLoadingContext.get().getModEventBus().addListener(this::init);
|
FMLModLoadingContext.get().getModEventBus().addListener(this::init);
|
||||||
|
|
||||||
ModSounds.init();
|
ModSounds.init();
|
||||||
|
ModEntities.init();
|
||||||
ModBlocks.init();
|
ModBlocks.init();
|
||||||
ModItems.init();
|
ModItems.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void preInit(final FMLPreInitializationEvent event)
|
private void preInit(final FMLPreInitializationEvent event)
|
||||||
{
|
{
|
||||||
|
proxy.preInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void init(final FMLInitializationEvent event)
|
private void init(final FMLInitializationEvent event)
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||||
|
*
|
||||||
|
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||||
|
*
|
||||||
|
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||||
|
******************************************************************************/
|
||||||
|
package biomesoplenty.core;
|
||||||
|
|
||||||
|
import biomesoplenty.api.item.BOPItems;
|
||||||
|
import biomesoplenty.common.entity.projectile.EntityMudball;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.renderer.entity.RenderSprite;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraftforge.fml.client.registry.RenderingRegistry;
|
||||||
|
|
||||||
|
public class ClientProxy extends CommonProxy
|
||||||
|
{
|
||||||
|
public ClientProxy()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void preInit()
|
||||||
|
{
|
||||||
|
RenderingRegistry.registerEntityRenderingHandler(EntityMudball.class, manager -> new RenderSprite<Entity>(manager, BOPItems.mudball, Minecraft.getInstance().getItemRenderer()));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||||
|
*
|
||||||
|
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||||
|
*
|
||||||
|
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||||
|
******************************************************************************/
|
||||||
|
package biomesoplenty.core;
|
||||||
|
|
||||||
|
public class CommonProxy
|
||||||
|
{
|
||||||
|
public CommonProxy()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void preInit() {}
|
||||||
|
}
|
|
@ -0,0 +1,94 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||||
|
*
|
||||||
|
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||||
|
*
|
||||||
|
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||||
|
******************************************************************************/
|
||||||
|
package biomesoplenty.init;
|
||||||
|
|
||||||
|
import biomesoplenty.common.entity.projectile.EntityMudball;
|
||||||
|
import com.mojang.datafixers.DataFixUtils;
|
||||||
|
import com.mojang.datafixers.types.Type;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.EntityType;
|
||||||
|
import net.minecraft.entity.monster.EntitySpider;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.util.SharedConstants;
|
||||||
|
import net.minecraft.util.datafix.DataFixesManager;
|
||||||
|
import net.minecraft.util.datafix.TypeReferences;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
|
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
import static biomesoplenty.api.entity.BOPEntities.*;
|
||||||
|
|
||||||
|
public class ModEntities
|
||||||
|
{
|
||||||
|
public static void init()
|
||||||
|
{
|
||||||
|
mudball = registerEntity(FixedEntityTypeBuilder.create(EntityMudball.class, EntityMudball::new), "mudball");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T extends Entity> EntityType<T> registerEntity(FixedEntityTypeBuilder<T> typeBuilder, String name)
|
||||||
|
{
|
||||||
|
EntityType<T> type = typeBuilder.build("biomesoplenty:" + name);
|
||||||
|
type.setRegistryName(name);
|
||||||
|
ForgeRegistries.ENTITIES.register(type);
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Remove this once Forge has fixed the bugs with calling build in
|
||||||
|
// EntityType.Builder, causing an exception when registering entities
|
||||||
|
public static class FixedEntityTypeBuilder<T extends Entity>
|
||||||
|
{
|
||||||
|
private final Class<? extends T> entityClass;
|
||||||
|
private final Function<? super World, ? extends T> factory;
|
||||||
|
private boolean serializable = true;
|
||||||
|
private boolean summonable = true;
|
||||||
|
|
||||||
|
private FixedEntityTypeBuilder(Class<? extends T> entityClassIn, Function<? super World, ? extends T> factoryIn)
|
||||||
|
{
|
||||||
|
this.entityClass = entityClassIn;
|
||||||
|
this.factory = factoryIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T extends Entity> FixedEntityTypeBuilder<T> create(Class<? extends T> entityClassIn, Function<? super World, ? extends T> factoryIn)
|
||||||
|
{
|
||||||
|
return new FixedEntityTypeBuilder<T>(entityClassIn, factoryIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T extends Entity> FixedEntityTypeBuilder<T> createNothing(Class<? extends T> entityClassIn)
|
||||||
|
{
|
||||||
|
return new FixedEntityTypeBuilder<T>(entityClassIn, (p_200708_0_) -> {
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public FixedEntityTypeBuilder<T> disableSummoning()
|
||||||
|
{
|
||||||
|
this.summonable = false;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FixedEntityTypeBuilder<T> disableSerialization()
|
||||||
|
{
|
||||||
|
this.serializable = false;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EntityType<T> build(String id) {
|
||||||
|
Type<?> type = null;
|
||||||
|
if (this.serializable) {
|
||||||
|
try {
|
||||||
|
type = DataFixesManager.getDataFixer().getSchema(DataFixUtils.makeKey(1519)).getChoiceType(TypeReferences.ENTITY_TYPE, id);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
// Ignore, we don't care
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new EntityType<T>(this.entityClass, this.factory, this.serializable, this.summonable, type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,6 +11,7 @@ import static biomesoplenty.api.item.BOPItems.*;
|
||||||
|
|
||||||
import biomesoplenty.api.sound.BOPSounds;
|
import biomesoplenty.api.sound.BOPSounds;
|
||||||
import biomesoplenty.common.item.ItemBOPRecord;
|
import biomesoplenty.common.item.ItemBOPRecord;
|
||||||
|
import biomesoplenty.common.item.ItemMudball;
|
||||||
import biomesoplenty.common.util.inventory.ItemGroupBOP;
|
import biomesoplenty.common.util.inventory.ItemGroupBOP;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraftforge.registries.ForgeRegistries;
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
|
@ -19,8 +20,7 @@ public class ModItems
|
||||||
{
|
{
|
||||||
public static void init()
|
public static void init()
|
||||||
{
|
{
|
||||||
// TODO: This should be ItemMudball
|
mudball = registerItem(new ItemMudball(), "mudball");
|
||||||
mudball = registerItem(new Item(new Item.Builder().group(ItemGroupBOP.instance)), "mudball");
|
|
||||||
mud_brick = registerItem(new Item(new Item.Builder().group(ItemGroupBOP.instance)), "mud_brick");
|
mud_brick = registerItem(new Item(new Item.Builder().group(ItemGroupBOP.instance)), "mud_brick");
|
||||||
pile_of_ashes = registerItem(new Item(new Item.Builder().group(ItemGroupBOP.instance)), "pile_of_ashes");
|
pile_of_ashes = registerItem(new Item(new Item.Builder().group(ItemGroupBOP.instance)), "pile_of_ashes");
|
||||||
chunk_of_flesh = registerItem(new Item(new Item.Builder().group(ItemGroupBOP.instance)), "chunk_of_flesh");
|
chunk_of_flesh = registerItem(new Item(new Item.Builder().group(ItemGroupBOP.instance)), "chunk_of_flesh");
|
||||||
|
|
Loading…
Reference in New Issue