package com.thebrokenrail.reliccraft.entity; import com.thebrokenrail.reliccraft.RelicCraft; import com.thebrokenrail.reliccraft.data.Action; import com.thebrokenrail.reliccraft.data.Actions; import com.thebrokenrail.reliccraft.item.RelicItem; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.thrown.ThrownItemEntity; import net.minecraft.item.Item; import net.minecraft.network.Packet; import net.minecraft.network.packet.s2c.play.EntitySpawnS2CPacket; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.EntityHitResult; import net.minecraft.util.hit.HitResult; import net.minecraft.world.World; import java.util.List; import java.util.Objects; @SuppressWarnings("unused") public class RelicEntity extends ThrownItemEntity { public RelicEntity(EntityType entityType, World world) { super(entityType, world); } public RelicEntity(World world, LivingEntity owner) { super(RelicCraft.RELIC_ENTITY, owner, world); } public RelicEntity(World world, double x, double y, double z) { super(RelicCraft.RELIC_ENTITY, x, y, z, world); } public RelicEntity(World world) { super(RelicCraft.RELIC_ENTITY, world); } @Override protected void onCollision(HitResult hitResult) { if (!getEntityWorld().isClient()) { String[] actions = RelicItem.getData(getItem()).use.actions; String id = actions[random.nextInt(actions.length)]; Action action = Actions.get(id); if (action != null) { if (hitResult.getType() == HitResult.Type.BLOCK) { BlockHitResult blockHitResult = (BlockHitResult) hitResult; action.execute(getEntityWorld(), getOwner(), blockHitResult.getBlockPos()); } else if (hitResult.getType() == HitResult.Type.ENTITY) { Entity entity = ((EntityHitResult) hitResult).getEntity(); action.execute(world, getOwner(), entity); } } remove(); } } @Override public void tick() { super.tick(); if (!getEntityWorld().isClient()) { List viewers = Objects.requireNonNull(getServer()).getPlayerManager().getPlayerList(); for (ServerPlayerEntity viewer : viewers) { ((ServerWorld) getEntityWorld()).spawnParticles(viewer, ParticleTypes.WITCH, true, getX(), getY(), getZ(), 8, 0.1d, 0.1d, 0.1d, 0d); } } } @Override protected Item getDefaultItem() { return RelicCraft.STAFF_ITEM; } @Override public Packet createSpawnPacket() { return new EntitySpawnS2CPacket(this); } }