mirror of
https://github.com/Sollace/Unicopia.git
synced 2024-11-24 05:47:59 +01:00
Fixed projectiles and other entities not spawning, fixed the staff
This commit is contained in:
parent
9c4568e707
commit
9e6da2f64a
6 changed files with 70 additions and 12 deletions
|
@ -7,7 +7,9 @@ import com.minelittlepony.unicopia.magic.Caster;
|
||||||
import com.minelittlepony.unicopia.magic.MagicEffect;
|
import com.minelittlepony.unicopia.magic.MagicEffect;
|
||||||
import com.minelittlepony.unicopia.magic.TossedMagicEffect;
|
import com.minelittlepony.unicopia.magic.TossedMagicEffect;
|
||||||
import com.minelittlepony.unicopia.magic.spell.SpellRegistry;
|
import com.minelittlepony.unicopia.magic.spell.SpellRegistry;
|
||||||
|
import com.minelittlepony.unicopia.network.Channel;
|
||||||
import com.minelittlepony.unicopia.network.EffectSync;
|
import com.minelittlepony.unicopia.network.EffectSync;
|
||||||
|
import com.minelittlepony.unicopia.network.MsgSpawnProjectile;
|
||||||
import com.minelittlepony.unicopia.util.projectile.AdvancedProjectile;
|
import com.minelittlepony.unicopia.util.projectile.AdvancedProjectile;
|
||||||
import com.minelittlepony.unicopia.util.projectile.Tossable;
|
import com.minelittlepony.unicopia.util.projectile.Tossable;
|
||||||
import com.minelittlepony.unicopia.util.projectile.TossableItem;
|
import com.minelittlepony.unicopia.util.projectile.TossableItem;
|
||||||
|
@ -24,6 +26,7 @@ import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.Items;
|
import net.minecraft.item.Items;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
|
import net.minecraft.network.Packet;
|
||||||
import net.minecraft.particle.ItemStackParticleEffect;
|
import net.minecraft.particle.ItemStackParticleEffect;
|
||||||
import net.minecraft.particle.ParticleEffect;
|
import net.minecraft.particle.ParticleEffect;
|
||||||
import net.minecraft.particle.ParticleTypes;
|
import net.minecraft.particle.ParticleTypes;
|
||||||
|
@ -205,7 +208,7 @@ public class ProjectileEntity extends ThrownItemEntity implements IMagicals, Adv
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void launch(Entity entityThrower, float pitch, float yaw, float wobble, float velocity, float inaccuracy) {
|
public void launch(Entity entityThrower, float pitch, float yaw, float wobble, float velocity, float inaccuracy) {
|
||||||
setVelocity(pitch, yaw, wobble, velocity, inaccuracy);
|
setProperties(entityThrower, pitch, yaw, wobble, velocity, inaccuracy);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ParticleEffect getParticleParameters() {
|
private ParticleEffect getParticleParameters() {
|
||||||
|
@ -289,4 +292,9 @@ public class ProjectileEntity extends ThrownItemEntity implements IMagicals, Adv
|
||||||
remove();
|
remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Packet<?> createSpawnPacket() {
|
||||||
|
return Channel.SPAWN_PROJECTILE.toPacket(new MsgSpawnProjectile(this));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,6 @@ import com.minelittlepony.unicopia.util.projectile.TossableItem;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.client.item.TooltipContext;
|
import net.minecraft.client.item.TooltipContext;
|
||||||
import net.minecraft.entity.Entity;
|
|
||||||
import net.minecraft.entity.EquipmentSlot;
|
import net.minecraft.entity.EquipmentSlot;
|
||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.LivingEntity;
|
||||||
import net.minecraft.entity.damage.DamageSource;
|
import net.minecraft.entity.damage.DamageSource;
|
||||||
|
@ -26,7 +25,6 @@ import net.minecraft.particle.ParticleTypes;
|
||||||
import net.minecraft.sound.SoundCategory;
|
import net.minecraft.sound.SoundCategory;
|
||||||
import net.minecraft.sound.SoundEvents;
|
import net.minecraft.sound.SoundEvents;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.ActionResult;
|
|
||||||
import net.minecraft.util.Hand;
|
import net.minecraft.util.Hand;
|
||||||
import net.minecraft.util.TypedActionResult;
|
import net.minecraft.util.TypedActionResult;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
@ -54,9 +52,8 @@ public class EnchantedStaffItem extends StaffItem implements Affine, TossableIte
|
||||||
if (EquinePredicates.PLAYER_UNICORN.test(player) && hand == Hand.MAIN_HAND) {
|
if (EquinePredicates.PLAYER_UNICORN.test(player) && hand == Hand.MAIN_HAND) {
|
||||||
ItemStack itemstack = player.getStackInHand(hand);
|
ItemStack itemstack = player.getStackInHand(hand);
|
||||||
|
|
||||||
player.swingHand(hand);
|
player.setCurrentHand(hand);
|
||||||
|
return TypedActionResult.consume(itemstack);
|
||||||
return new TypedActionResult<>(ActionResult.SUCCESS, itemstack);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.use(world, player, hand);
|
return super.use(world, player, hand);
|
||||||
|
@ -91,15 +88,15 @@ public class EnchantedStaffItem extends StaffItem implements Affine, TossableIte
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) {
|
@Override
|
||||||
|
public void usageTick(World world, LivingEntity entity, ItemStack stack, int ticksRemaining) {
|
||||||
if (entity instanceof LivingEntity) {
|
if (entity instanceof LivingEntity) {
|
||||||
LivingEntity living = (LivingEntity)entity;
|
LivingEntity living = entity;
|
||||||
|
|
||||||
if (living.getActiveItem().getItem() == this) {
|
if (living.getActiveItem().getItem() == this) {
|
||||||
Vec3d eyes = entity.getCameraPosVec(1);
|
Vec3d eyes = entity.getCameraPosVec(1);
|
||||||
|
|
||||||
float i = getMaxUseTime(stack) - living.getItemUseTimeLeft();
|
float i = getMaxUseTime(stack) - ticksRemaining;
|
||||||
|
|
||||||
world.addParticle(i > 150 ? ParticleTypes.LARGE_SMOKE : ParticleTypes.CLOUD, eyes.x, eyes.y, eyes.z,
|
world.addParticle(i > 150 ? ParticleTypes.LARGE_SMOKE : ParticleTypes.CLOUD, eyes.x, eyes.y, eyes.z,
|
||||||
(world.random.nextGaussian() - 0.5) / 10,
|
(world.random.nextGaussian() - 0.5) / 10,
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.minelittlepony.unicopia.magic;
|
package com.minelittlepony.unicopia.magic;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.entity.SpellcastEntity;
|
import com.minelittlepony.unicopia.entity.SpellcastEntity;
|
||||||
|
import com.minelittlepony.unicopia.entity.UEntities;
|
||||||
import com.minelittlepony.unicopia.magic.spell.SpellRegistry;
|
import com.minelittlepony.unicopia.magic.spell.SpellRegistry;
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
@ -46,7 +47,7 @@ public interface Castable extends MagicalItem, Dispensable {
|
||||||
* Called to cast a spell. The result is an entity spawned with the spell attached.
|
* Called to cast a spell. The result is an entity spawned with the spell attached.
|
||||||
*/
|
*/
|
||||||
default SpellcastEntity castContainedSpell(World world, BlockPos pos, ItemStack stack, MagicEffect effect) {
|
default SpellcastEntity castContainedSpell(World world, BlockPos pos, ItemStack stack, MagicEffect effect) {
|
||||||
SpellcastEntity spell = new SpellcastEntity(null, world);
|
SpellcastEntity spell = new SpellcastEntity(UEntities.MAGIC_SPELL, world);
|
||||||
|
|
||||||
spell.setAffinity(getAffinity(stack));
|
spell.setAffinity(getAffinity(stack));
|
||||||
spell.updatePositionAndAngles(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 0, 0);
|
spell.updatePositionAndAngles(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 0, 0);
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.minelittlepony.unicopia.magic;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.entity.ProjectileEntity;
|
import com.minelittlepony.unicopia.entity.ProjectileEntity;
|
||||||
|
import com.minelittlepony.unicopia.entity.UEntities;
|
||||||
import com.minelittlepony.unicopia.item.UItems;
|
import com.minelittlepony.unicopia.item.UItems;
|
||||||
import com.minelittlepony.unicopia.magic.spell.SpellRegistry;
|
import com.minelittlepony.unicopia.magic.spell.SpellRegistry;
|
||||||
import com.minelittlepony.unicopia.util.projectile.AdvancedProjectile;
|
import com.minelittlepony.unicopia.util.projectile.AdvancedProjectile;
|
||||||
|
@ -49,7 +50,7 @@ public interface TossedMagicEffect extends MagicEffect, Tossable<Caster<?>> {
|
||||||
world.playSound(null, entity.getX(), entity.getY(), entity.getZ(), getThrowSound(caster), SoundCategory.NEUTRAL, 0.7F, 0.4F / (world.random.nextFloat() * 0.4F + 0.8F));
|
world.playSound(null, entity.getX(), entity.getY(), entity.getZ(), getThrowSound(caster), SoundCategory.NEUTRAL, 0.7F, 0.4F / (world.random.nextFloat() * 0.4F + 0.8F));
|
||||||
|
|
||||||
if (caster.isLocal()) {
|
if (caster.isLocal()) {
|
||||||
AdvancedProjectile projectile = new ProjectileEntity(null, world, caster.getOwner());
|
AdvancedProjectile projectile = new ProjectileEntity(UEntities.THROWN_ITEM, world, caster.getOwner());
|
||||||
|
|
||||||
projectile.setItem(getCastAppearance(caster));
|
projectile.setItem(getCastAppearance(caster));
|
||||||
projectile.setThrowDamage(getThrowDamage(caster));
|
projectile.setThrowDamage(getThrowDamage(caster));
|
||||||
|
|
|
@ -20,6 +20,7 @@ public interface Channel {
|
||||||
SPacketType<MsgPlayerCapabilities> BROADCAST_CAPABILITIES = broadcast(PLAYER_CAPABILITIES, MsgPlayerCapabilities::new);
|
SPacketType<MsgPlayerCapabilities> BROADCAST_CAPABILITIES = broadcast(PLAYER_CAPABILITIES, MsgPlayerCapabilities::new);
|
||||||
|
|
||||||
CPacketType<MsgSpawnRainbow> SPAWN_RAINBOW = serverToClient(new Identifier("unicopia", "rainbow_entity"), MsgSpawnRainbow::new);
|
CPacketType<MsgSpawnRainbow> SPAWN_RAINBOW = serverToClient(new Identifier("unicopia", "rainbow_entity"), MsgSpawnRainbow::new);
|
||||||
|
CPacketType<MsgSpawnProjectile> SPAWN_PROJECTILE = serverToClient(new Identifier("unicopia", "projectile_entity"), MsgSpawnProjectile::new);
|
||||||
|
|
||||||
static void bootstrap() { }
|
static void bootstrap() { }
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
package com.minelittlepony.unicopia.network;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import net.fabricmc.fabric.api.network.PacketContext;
|
||||||
|
import net.minecraft.client.network.packet.EntitySpawnS2CPacket;
|
||||||
|
import net.minecraft.client.world.ClientWorld;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.util.PacketByteBuf;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
public class MsgSpawnProjectile extends EntitySpawnS2CPacket implements Channel.Packet {
|
||||||
|
|
||||||
|
MsgSpawnProjectile(PacketByteBuf buffer) {
|
||||||
|
try {
|
||||||
|
read(buffer);
|
||||||
|
} catch (IOException e) { }
|
||||||
|
}
|
||||||
|
|
||||||
|
public MsgSpawnProjectile(Entity e) {
|
||||||
|
super(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void toBuffer(PacketByteBuf buffer) {
|
||||||
|
try {
|
||||||
|
write(buffer);
|
||||||
|
} catch (IOException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(PacketContext context) {
|
||||||
|
World world = context.getPlayer().world;
|
||||||
|
Entity entity = getEntityTypeId().create(world);
|
||||||
|
|
||||||
|
entity.updateTrackedPosition(getX(), getY(), getZ());
|
||||||
|
entity.pitch = getPitch() * 360 / 256.0F;
|
||||||
|
entity.yaw = getYaw() * 360 / 256.0F;
|
||||||
|
entity.setEntityId(getId());
|
||||||
|
entity.setUuid(getUuid());
|
||||||
|
((ClientWorld)world).addEntity(getId(), entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue