use of net.minecraft.network.play.server.SChangeGameStatePacket in project WarDance by Jackiecrazy.
the class ThrownWeaponEntity method onHitEntity.
@Override
protected void onHitEntity(EntityRayTraceResult result) {
Entity entity = result.getEntity();
float f = (float) this.getDeltaMovement().length();
int i = MathHelper.ceil(MathHelper.clamp((double) f * this.getBaseDamage(), 0.0D, 2.147483647E9D));
if (this.getPierceLevel() > 0) {
if (this.piercingIgnoreEntityIds == null) {
this.piercingIgnoreEntityIds = new IntOpenHashSet(5);
}
if (this.piercedAndKilledEntities == null) {
this.piercedAndKilledEntities = Lists.newArrayListWithCapacity(5);
}
if (this.piercingIgnoreEntityIds.size() >= this.getPierceLevel() + 1) {
this.remove();
return;
}
this.piercingIgnoreEntityIds.add(entity.getId());
}
if (this.isCritArrow()) {
long j = (long) this.random.nextInt(i / 2 + 2);
i = (int) Math.min(j + (long) i, 2147483647L);
}
Entity entity1 = this.getOwner();
DamageSource damagesource;
if (entity1 == null) {
damagesource = DamageSource.arrow(this, this);
} else {
damagesource = DamageSource.arrow(this, entity1);
if (entity1 instanceof LivingEntity) {
((LivingEntity) entity1).setLastHurtMob(entity);
}
}
boolean flag = entity.getType() == EntityType.ENDERMAN;
int k = entity.getRemainingFireTicks();
if (this.isOnFire() && !flag) {
entity.setSecondsOnFire(5);
}
if (entity.hurt(damagesource, (float) i)) {
if (flag) {
return;
}
if (entity instanceof LivingEntity) {
LivingEntity livingentity = (LivingEntity) entity;
if (!this.level.isClientSide && this.getPierceLevel() <= 0) {
livingentity.setArrowCount(livingentity.getArrowCount() + 1);
}
if (this.knockback > 0) {
Vector3d vector3d = this.getDeltaMovement().multiply(1.0D, 0.0D, 1.0D).normalize().scale((double) this.knockback * 0.6D);
if (vector3d.lengthSqr() > 0.0D) {
livingentity.push(vector3d.x, 0.1D, vector3d.z);
}
}
if (!this.level.isClientSide && entity1 instanceof LivingEntity) {
EnchantmentHelper.doPostHurtEffects(livingentity, entity1);
EnchantmentHelper.doPostDamageEffects((LivingEntity) entity1, livingentity);
}
this.doPostHurtEffects(livingentity);
if (livingentity != entity1 && livingentity instanceof PlayerEntity && entity1 instanceof ServerPlayerEntity && !this.isSilent()) {
((ServerPlayerEntity) entity1).connection.send(new SChangeGameStatePacket(SChangeGameStatePacket.ARROW_HIT_PLAYER, 0.0F));
}
if (!entity.isAlive() && this.piercedAndKilledEntities != null) {
this.piercedAndKilledEntities.add(livingentity);
}
if (!this.level.isClientSide && entity1 instanceof ServerPlayerEntity) {
ServerPlayerEntity serverplayerentity = (ServerPlayerEntity) entity1;
if (this.piercedAndKilledEntities != null && this.shotFromCrossbow()) {
CriteriaTriggers.KILLED_BY_CROSSBOW.trigger(serverplayerentity, this.piercedAndKilledEntities);
} else if (!entity.isAlive() && this.shotFromCrossbow()) {
CriteriaTriggers.KILLED_BY_CROSSBOW.trigger(serverplayerentity, Arrays.asList(entity));
}
}
}
this.playSound(this.getDefaultHitGroundSoundEvent(), 1.0F, 1.2F / (this.random.nextFloat() * 0.2F + 0.9F));
if (this.getPierceLevel() <= 0) {
this.remove();
}
} else {
entity.setRemainingFireTicks(k);
this.setDeltaMovement(this.getDeltaMovement().scale(-0.1D));
this.yRot += 180.0F;
this.yRotO += 180.0F;
if (!this.level.isClientSide && this.getDeltaMovement().lengthSqr() < 1.0E-7D) {
if (this.pickup == AbstractArrowEntity.PickupStatus.ALLOWED) {
this.spawnAtLocation(this.getPickupItem(), 0.1F);
}
this.remove();
}
}
}
use of net.minecraft.network.play.server.SChangeGameStatePacket in project Arclight by IzzelAliz.
the class ServerPlayerEntityMixin_1_14 method changeDimension.
/**
* @author IzzelAliz
* @reason
*/
@Nullable
@Overwrite
public Entity changeDimension(DimensionType dimensionmanager) {
PlayerTeleportEvent.TeleportCause cause = bridge$getTeleportCause().orElse(PlayerTeleportEvent.TeleportCause.UNKNOWN);
if (!net.minecraftforge.common.ForgeHooks.onTravelToDimension((ServerPlayerEntity) (Object) this, dimensionmanager))
return null;
if (this.isSleeping()) {
return (ServerPlayerEntity) (Object) this;
}
DimensionType dimensionmanager2 = this.dimension;
if (((DimensionTypeBridge) dimensionmanager2).bridge$getType() == DimensionType.THE_END && ((DimensionTypeBridge) dimensionmanager).bridge$getType() == DimensionType.OVERWORLD) {
this.invulnerableDimensionChange = true;
this.detach();
this.func_71121_q().removePlayer((ServerPlayerEntity) (Object) this, true);
if (!this.queuedEndExit) {
this.queuedEndExit = true;
this.connection.sendPacket(new SChangeGameStatePacket(4, this.seenCredits ? 0.0f : 1.0f));
this.seenCredits = true;
}
return (ServerPlayerEntity) (Object) this;
}
ServerWorld worldserver = this.server.func_71218_a(dimensionmanager2);
ServerWorld worldserver2 = this.server.func_71218_a(dimensionmanager);
WorldInfo worlddata = this.world.getWorldInfo();
double d0 = this.posX;
double d2 = this.posY;
double d3 = this.posZ;
float f = this.rotationPitch;
float f2 = this.rotationYaw;
double d4 = 8.0;
float f3 = f2;
worldserver.getProfiler().startSection("moving");
if (worldserver2 != null) {
if (dimensionmanager2 == DimensionType.OVERWORLD && dimensionmanager == DimensionType.THE_NETHER) {
this.enteredNetherPosition = new Vec3d(this.posX, this.posY, this.posZ);
d0 /= 8.0;
d3 /= 8.0;
} else if (dimensionmanager2 == DimensionType.THE_NETHER && dimensionmanager == DimensionType.OVERWORLD) {
d0 *= 8.0;
d3 *= 8.0;
} else if (dimensionmanager2 == DimensionType.OVERWORLD && dimensionmanager == DimensionType.THE_END) {
BlockPos blockposition = worldserver2.getSpawnCoordinate();
d0 = blockposition.getX();
d2 = blockposition.getY();
d3 = blockposition.getZ();
f2 = 90.0f;
f = 0.0f;
}
}
Location enter = this.bridge$getBukkitEntity().getLocation();
Location exit = (worldserver2 == null) ? null : new Location(((WorldBridge) worldserver2).bridge$getWorld(), d0, d2, d3, f2, f);
PlayerPortalEvent event = new PlayerPortalEvent((Player) this.bridge$getBukkitEntity(), enter, exit, cause);
Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled() || event.getTo() == null) {
return null;
}
exit = event.getTo();
if (exit == null) {
return null;
}
PlayerTeleportEvent tpEvent = new PlayerTeleportEvent((Player) this.bridge$getBukkitEntity(), enter, exit, cause);
Bukkit.getServer().getPluginManager().callEvent(tpEvent);
if (tpEvent.isCancelled() || tpEvent.getTo() == null) {
return null;
}
exit = tpEvent.getTo();
if (exit == null) {
return null;
}
worldserver2 = ((CraftWorld) exit.getWorld()).getHandle();
d0 = exit.getX();
d2 = exit.getY();
d3 = exit.getZ();
f2 = exit.getYaw();
f = exit.getPitch();
this.invulnerableDimensionChange = true;
dimensionmanager = worldserver2.getDimension().getType();
this.dimension = dimensionmanager;
net.minecraftforge.fml.network.NetworkHooks.sendDimensionDataPacket(this.connection.netManager, (ServerPlayerEntity) (Object) this);
this.connection.sendPacket(new SRespawnPacket(worldserver2.dimension.getType(), this.world.getWorldInfo().getGenerator(), this.interactionManager.getGameType()));
this.connection.sendPacket(new SServerDifficultyPacket(this.world.getDifficulty(), this.world.getWorldInfo().isDifficultyLocked()));
PlayerList playerlist = this.server.getPlayerList();
playerlist.updatePermissionLevel((ServerPlayerEntity) (Object) this);
worldserver.removePlayer((ServerPlayerEntity) (Object) this, true);
this.removed = false;
this.setLocationAndAngles(d0, d2, d3, f2, f);
worldserver.getProfiler().endSection();
worldserver.getProfiler().startSection("placing");
double d5 = Math.min(-2.9999872E7, worldserver2.getWorldBorder().minX() + 16.0);
double d6 = Math.min(-2.9999872E7, worldserver2.getWorldBorder().minZ() + 16.0);
double d7 = Math.min(2.9999872E7, worldserver2.getWorldBorder().maxX() - 16.0);
double d8 = Math.min(2.9999872E7, worldserver2.getWorldBorder().maxZ() - 16.0);
d0 = MathHelper.clamp(d0, d5, d7);
d3 = MathHelper.clamp(d3, d6, d8);
this.setLocationAndAngles(d0, d2, d3, f2, f);
if (((DimensionTypeBridge) dimensionmanager).bridge$getType() == DimensionType.THE_END) {
int i = MathHelper.floor(this.posX);
int j = MathHelper.floor(this.posY) - 1;
int k = MathHelper.floor(this.posZ);
boolean flag = true;
boolean flag2 = false;
BlockStateListPopulator blockList = new BlockStateListPopulator(worldserver2);
for (int l = -2; l <= 2; ++l) {
for (int i2 = -2; i2 <= 2; ++i2) {
for (int j2 = -1; j2 < 3; ++j2) {
int k2 = i + i2 * 1 + l * 0;
int l2 = j + j2;
int i3 = k + i2 * 0 - l * 1;
boolean flag3 = j2 < 0;
blockList.setBlockState(new BlockPos(k2, l2, i3), flag3 ? Blocks.OBSIDIAN.getDefaultState() : Blocks.AIR.getDefaultState(), 3);
}
}
}
org.bukkit.World bworld = ((WorldBridge) worldserver2).bridge$getWorld();
PortalCreateEvent portalEvent = new PortalCreateEvent((List) blockList.getList(), bworld, this.bridge$getBukkitEntity(), PortalCreateEvent.CreateReason.END_PLATFORM);
Bukkit.getPluginManager().callEvent(portalEvent);
if (!portalEvent.isCancelled()) {
blockList.updateList();
}
this.setLocationAndAngles(i, j, k, f2, 0.0f);
this.setMotion(Vec3d.ZERO);
} else if (!worldserver2.getDefaultTeleporter().placeInPortal((ServerPlayerEntity) (Object) this, f3)) {
worldserver2.getDefaultTeleporter().makePortal((ServerPlayerEntity) (Object) this);
worldserver2.getDefaultTeleporter().placeInPortal((ServerPlayerEntity) (Object) this, f3);
}
worldserver.getProfiler().endSection();
this.setWorld(worldserver2);
worldserver2.func_217447_b((ServerPlayerEntity) (Object) this);
this.func_213846_b(worldserver);
this.connection.setPlayerLocation(this.posX, this.posY, this.posZ, f2, f);
this.interactionManager.func_73080_a(worldserver2);
this.connection.sendPacket(new SPlayerAbilitiesPacket(this.abilities));
playerlist.func_72354_b((ServerPlayerEntity) (Object) this, worldserver2);
playerlist.sendInventory((ServerPlayerEntity) (Object) this);
for (EffectInstance mobeffect : this.getActivePotionEffects()) {
this.connection.sendPacket(new SPlayEntityEffectPacket(this.getEntityId(), mobeffect));
}
this.connection.sendPacket(new SPlaySoundEventPacket(1032, BlockPos.ZERO, 0, false));
this.lastExperience = -1;
this.lastHealth = -1.0f;
this.lastFoodLevel = -1;
PlayerChangedWorldEvent changeEvent = new PlayerChangedWorldEvent((Player) this.bridge$getBukkitEntity(), ((WorldBridge) worldserver).bridge$getWorld());
Bukkit.getPluginManager().callEvent(changeEvent);
net.minecraftforge.fml.hooks.BasicEventHooks.firePlayerChangedDimensionEvent((ServerPlayerEntity) (Object) this, dimensionmanager2, dimensionmanager);
return (ServerPlayerEntity) (Object) this;
}
use of net.minecraft.network.play.server.SChangeGameStatePacket in project Arclight by IzzelAliz.
the class ServerPlayerEntityMixin_1_15 method changeDimension.
/**
* @author IzzelAliz
* @reason
*/
@Overwrite(remap = false)
@Nullable
public Entity changeDimension(DimensionType dim, ITeleporter teleporter) {
DimensionType[] destination = { dim };
if (this.isSleeping())
return (ServerPlayerEntity) (Object) this;
if (!ForgeHooks.onTravelToDimension((ServerPlayerEntity) (Object) this, destination[0]))
return null;
PlayerTeleportEvent.TeleportCause cause = bridge$getTeleportCause().orElse(PlayerTeleportEvent.TeleportCause.UNKNOWN);
// this.invulnerableDimensionChange = true;
DimensionType dimensiontype = this.dimension;
if (((DimensionTypeBridge) dimensiontype).bridge$getType() == DimensionType.THE_END && ((DimensionTypeBridge) destination[0]).bridge$getType() == DimensionType.OVERWORLD && teleporter instanceof Teleporter) {
// Forge: Fix non-vanilla teleporters triggering end credits
this.invulnerableDimensionChange = true;
this.detach();
// Forge: The player entity is cloned so keep the data until after cloning calls copyFrom
this.getServerWorld().removePlayer((ServerPlayerEntity) (Object) this, true);
if (!this.queuedEndExit) {
this.queuedEndExit = true;
this.connection.sendPacket(new SChangeGameStatePacket(4, this.seenCredits ? 0.0F : 1.0F));
this.seenCredits = true;
}
return (ServerPlayerEntity) (Object) this;
} else {
ServerWorld serverworld = this.server.getWorld(dimensiontype);
// this.dimension = destination;
ServerWorld[] serverworld1 = { this.server.getWorld(destination[0]) };
/*
WorldInfo worldinfo = serverworld1.getWorldInfo();
NetworkHooks.sendDimensionDataPacket(this.connection.netManager, (ServerPlayerEntity) (Object) this);
this.connection.sendPacket(new SRespawnPacket(destination, WorldInfo.byHashing(worldinfo.getSeed()), worldinfo.getGenerator(), this.interactionManager.getGameType()));
this.connection.sendPacket(new SServerDifficultyPacket(worldinfo.getDifficulty(), worldinfo.isDifficultyLocked()));
PlayerList playerlist = this.server.getPlayerList();
playerlist.updatePermissionLevel((ServerPlayerEntity) (Object) this);
serverworld.removeEntity((ServerPlayerEntity) (Object) this, true); //Forge: the player entity is moved to the new world, NOT cloned. So keep the data alive with no matching invalidate call.
this.revive();
*/
PlayerList[] playerlist = new PlayerList[1];
Entity e = teleporter.placeEntity((ServerPlayerEntity) (Object) this, serverworld, serverworld1[0], this.rotationYaw, spawnPortal -> {
// Forge: Start vanilla logic
double d0 = this.getPosX();
double d1 = this.getPosY();
double d2 = this.getPosZ();
float f = this.rotationPitch;
float f1 = this.rotationYaw;
double d3 = 8.0D;
float f2 = f1;
serverworld.getProfiler().startSection("moving");
if (serverworld1[0] != null) {
double moveFactor = serverworld.getDimension().getMovementFactor() / serverworld1[0].getDimension().getMovementFactor();
d0 *= moveFactor;
d2 *= moveFactor;
if (dimensiontype == DimensionType.OVERWORLD && destination[0] == DimensionType.THE_NETHER) {
this.enteredNetherPosition = this.getPositionVec();
} else if (dimensiontype == DimensionType.OVERWORLD && destination[0] == DimensionType.THE_END) {
BlockPos blockpos = serverworld1[0].getSpawnCoordinate();
d0 = blockpos.getX();
d1 = blockpos.getY();
d2 = blockpos.getZ();
f1 = 90.0F;
f = 0.0F;
}
}
Location enter = this.bridge$getBukkitEntity().getLocation();
Location exit = (serverworld1[0] == null) ? null : new Location(((ServerWorldBridge) serverworld1[0]).bridge$getWorld(), d0, d1, d2, f1, f);
PlayerPortalEvent event = new PlayerPortalEvent(this.bridge$getBukkitEntity(), enter, exit, cause, 128, true, ((DimensionTypeBridge) destination[0]).bridge$getType() == DimensionType.THE_END ? 0 : 16);
Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled() || event.getTo() == null) {
return null;
}
exit = event.getTo();
if (exit == null) {
return null;
}
serverworld1[0] = ((CraftWorld) exit.getWorld()).getHandle();
d0 = exit.getX();
d1 = exit.getY();
d2 = exit.getZ();
// this.setLocationAndAngles(d0, d1, d2, f1, f);
serverworld.getProfiler().endSection();
serverworld.getProfiler().startSection("placing");
double d7 = Math.max(-2.9999872E7D, serverworld1[0].getWorldBorder().minX() + 16.0D);
double d4 = Math.max(-2.9999872E7D, serverworld1[0].getWorldBorder().minZ() + 16.0D);
double d5 = Math.min(2.9999872E7D, serverworld1[0].getWorldBorder().maxX() - 16.0D);
double d6 = Math.min(2.9999872E7D, serverworld1[0].getWorldBorder().maxZ() - 16.0D);
d0 = MathHelper.clamp(d0, d7, d5);
d2 = MathHelper.clamp(d2, d4, d6);
// this.setLocationAndAngles(d0, d1, d2, f1, f);
Vec3d exitVelocity = Vec3d.ZERO;
BlockPos exitPosition = new BlockPos(d0, d1, d2);
if (((DimensionTypeBridge) destination[0]).bridge$getType() == DimensionType.THE_END) {
int i = exitPosition.getX();
int j = exitPosition.getY() - 1;
int k = exitPosition.getZ();
if (event.getCanCreatePortal()) {
BlockStateListPopulator blockList = new BlockStateListPopulator(serverworld1[0]);
for (int j1 = -2; j1 <= 2; ++j1) {
for (int k1 = -2; k1 <= 2; ++k1) {
for (int l1 = -1; l1 < 3; ++l1) {
int i2 = i + k1 * 1 + j1 * 0;
int j2 = j + l1;
int k2 = k + k1 * 0 - j1 * 1;
boolean flag = l1 < 0;
blockList.setBlockState(new BlockPos(i2, j2, k2), flag ? Blocks.OBSIDIAN.getDefaultState() : Blocks.AIR.getDefaultState(), 3);
}
}
}
org.bukkit.World bworld = ((ServerWorldBridge) serverworld1[0]).bridge$getWorld();
PortalCreateEvent portalEvent = new PortalCreateEvent((List<BlockState>) (List) blockList.getList(), bworld, this.bridge$getBukkitEntity(), PortalCreateEvent.CreateReason.END_PLATFORM);
Bukkit.getPluginManager().callEvent(portalEvent);
if (!portalEvent.isCancelled()) {
blockList.updateList();
}
}
// this.setLocationAndAngles(i, j, k, f1, 0.0F);
exit.setX(i);
exit.setY(j);
exit.setZ(k);
// this.setMotion(Vec3d.ZERO);
exitVelocity = Vec3d.ZERO;
} else {
BlockPattern.PortalInfo portalInfo = ((TeleporterBridge) serverworld1[0].getDefaultTeleporter()).bridge$placeInPortal((ServerPlayerEntity) (Object) this, exitPosition, f2, event.getSearchRadius(), true);
if (spawnPortal && portalInfo == null && event.getCanCreatePortal()) {
if (((TeleporterBridge) serverworld1[0].getDefaultTeleporter()).bridge$makePortal((ServerPlayerEntity) (Object) this, exitPosition, event.getCreationRadius())) {
// serverworld1.getDefaultTeleporter().placeInPortal((ServerPlayerEntity) (Object) this, f2);
portalInfo = ((TeleporterBridge) serverworld1[0].getDefaultTeleporter()).bridge$placeInPortal((ServerPlayerEntity) (Object) this, exitPosition, f2, event.getSearchRadius(), true);
}
}
if (portalInfo == null) {
return null;
}
exitVelocity = portalInfo.motion;
exit.setX(portalInfo.pos.getX());
exit.setY(portalInfo.pos.getY());
exit.setZ(portalInfo.pos.getZ());
exit.setYaw(f2 + (float) portalInfo.rotation);
}
serverworld.getProfiler().endSection();
PlayerTeleportEvent tpEvent = new PlayerTeleportEvent(this.bridge$getBukkitEntity(), enter, exit, cause);
Bukkit.getServer().getPluginManager().callEvent(tpEvent);
if (tpEvent.isCancelled() || tpEvent.getTo() == null) {
return null;
}
exit = tpEvent.getTo();
if (exit == null) {
return null;
}
serverworld1[0] = ((CraftWorld) exit.getWorld()).getHandle();
this.invulnerableDimensionChange = true;
destination[0] = serverworld1[0].getDimension().getType();
this.dimension = destination[0];
WorldInfo worldinfo = serverworld1[0].getWorldInfo();
NetworkHooks.sendDimensionDataPacket(this.connection.netManager, (ServerPlayerEntity) (Object) this);
this.connection.sendPacket(new SRespawnPacket(destination[0], WorldInfo.byHashing(worldinfo.getSeed()), worldinfo.getGenerator(), this.interactionManager.getGameType()));
this.connection.sendPacket(new SServerDifficultyPacket(worldinfo.getDifficulty(), worldinfo.isDifficultyLocked()));
playerlist[0] = this.server.getPlayerList();
playerlist[0].updatePermissionLevel((ServerPlayerEntity) (Object) this);
// Forge: the player entity is moved to the new world, NOT cloned. So keep the data alive with no matching invalidate call.
serverworld.removeEntity((ServerPlayerEntity) (Object) this, true);
this.revive();
this.setMotion(exitVelocity);
this.setWorld(serverworld1[0]);
serverworld1[0].addDuringPortalTeleport((ServerPlayerEntity) (Object) this);
this.func_213846_b(serverworld);
// this.connection.setPlayerLocation(this.getPosX(), this.getPosY(), this.getPosZ(), f1, f);
((ServerPlayNetHandlerBridge) this.connection).bridge$teleport(exit);
this.connection.captureCurrentPosition();
// forge: this is part of the ITeleporter patch
return (ServerPlayerEntity) (Object) this;
});
// Forge: End vanilla logic
if (e == null) {
return (ServerPlayerEntity) (Object) this;
} else if (e != (Object) this) {
throw new IllegalArgumentException(String.format("Teleporter %s returned not the player entity but instead %s, expected PlayerEntity %s", teleporter, e, this));
}
this.interactionManager.setWorld(serverworld1[0]);
this.connection.sendPacket(new SPlayerAbilitiesPacket(this.abilities));
playerlist[0].sendWorldInfo((ServerPlayerEntity) (Object) this, serverworld1[0]);
playerlist[0].sendInventory((ServerPlayerEntity) (Object) this);
for (EffectInstance effectinstance : this.getActivePotionEffects()) {
this.connection.sendPacket(new SPlayEntityEffectPacket(this.getEntityId(), effectinstance));
}
this.connection.sendPacket(new SPlaySoundEventPacket(1032, BlockPos.ZERO, 0, false));
this.lastExperience = -1;
this.lastHealth = -1.0F;
this.lastFoodLevel = -1;
BasicEventHooks.firePlayerChangedDimensionEvent((ServerPlayerEntity) (Object) this, dimensiontype, destination[0]);
PlayerChangedWorldEvent changeEvent = new PlayerChangedWorldEvent(this.bridge$getBukkitEntity(), ((WorldBridge) serverworld).bridge$getWorld());
Bukkit.getPluginManager().callEvent(changeEvent);
return (ServerPlayerEntity) (Object) this;
}
}
use of net.minecraft.network.play.server.SChangeGameStatePacket in project Arclight by IzzelAliz.
the class PlayerListMixin method moveToWorld.
public ServerPlayerEntity moveToWorld(ServerPlayerEntity playerIn, DimensionType type, boolean flag, Location location, boolean avoidSuffocation) {
if (!net.minecraftforge.common.ForgeHooks.onTravelToDimension(playerIn, type))
return playerIn;
playerIn.stopRiding();
this.players.remove(playerIn);
// this.playersByName.remove(playerIn.getScoreboardName().toLowerCase(Locale.ROOT));
playerIn.getServerWorld().removePlayer(playerIn, true);
BlockPos pos = playerIn.getBedLocation(type);
boolean flag2 = playerIn.isSpawnForced(type);
org.bukkit.World fromWorld = ((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity().getWorld();
playerIn.queuedEndExit = false;
playerIn.copyFrom(playerIn, flag);
playerIn.setEntityId(playerIn.getEntityId());
playerIn.setPrimaryHand(playerIn.getPrimaryHand());
for (String s : playerIn.getTags()) {
playerIn.addTag(s);
}
if (location == null) {
boolean isBedSpawn = false;
CraftWorld cworld = (CraftWorld) Bukkit.getServer().getWorld(((ServerPlayerEntityBridge) playerIn).bridge$getSpawnWorld());
if (cworld != null && pos != null) {
Optional<Vec3d> optional = PlayerEntity.checkBedValidRespawnPosition(cworld.getHandle(), pos, flag2);
if (optional.isPresent()) {
Vec3d vec3d = optional.get();
isBedSpawn = true;
location = new Location(cworld, vec3d.x, vec3d.y, vec3d.z);
} else {
this.bridge$setSpawnPoint(playerIn, null, true, playerIn.dimension, false);
playerIn.connection.sendPacket(new SChangeGameStatePacket(0, 0.0f));
}
}
if (location == null) {
cworld = (CraftWorld) Bukkit.getServer().getWorlds().get(0);
pos = ((ServerPlayerEntityBridge) playerIn).bridge$getSpawnPoint(cworld.getHandle());
location = new Location(cworld, pos.getX() + 0.5f, pos.getY() + 0.1f, pos.getZ() + 0.5f);
}
Player respawnPlayer = this.cserver.getPlayer(playerIn);
PlayerRespawnEvent respawnEvent = new PlayerRespawnEvent(respawnPlayer, location, isBedSpawn);
this.cserver.getPluginManager().callEvent(respawnEvent);
if (((ServerPlayNetHandlerBridge) playerIn.connection).bridge$isDisconnected()) {
return playerIn;
}
location = respawnEvent.getRespawnLocation();
if (!flag) {
((ServerPlayerEntityBridge) playerIn).bridge$reset();
}
} else {
location.setWorld(((WorldBridge) this.server.getWorld(type)).bridge$getWorld());
}
ServerWorld serverWorld = ((CraftWorld) location.getWorld()).getHandle();
playerIn.setPositionAndRotation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
playerIn.connection.captureCurrentPosition();
while (avoidSuffocation && !serverWorld.hasNoCollisions(playerIn) && playerIn.getPosY() < 256.0) {
playerIn.setPosition(playerIn.getPosX(), playerIn.getPosY() + 1.0, playerIn.getPosZ());
}
if (fromWorld.getEnvironment() == ((WorldBridge) serverWorld).bridge$getWorld().getEnvironment()) {
playerIn.connection.sendPacket(this.bridge$respawnPacket((serverWorld.dimension.getType().getId() >= 0) ? DimensionType.THE_NETHER : DimensionType.OVERWORLD, serverWorld.getWorldInfo().getSeed(), serverWorld.getWorldInfo().getGenerator(), playerIn.interactionManager.getGameType()));
}
WorldInfo worldInfo = serverWorld.getWorldInfo();
net.minecraftforge.fml.network.NetworkHooks.sendDimensionDataPacket(playerIn.connection.netManager, playerIn);
playerIn.connection.sendPacket(this.bridge$respawnPacket(((DimensionTypeBridge) serverWorld.dimension.getType()).bridge$getType(), serverWorld.getWorldInfo().getSeed(), serverWorld.getWorldInfo().getGenerator(), playerIn.interactionManager.getGameType()));
playerIn.connection.sendPacket(new SUpdateViewDistancePacket(((ServerWorldBridge) serverWorld).bridge$spigotConfig().viewDistance));
playerIn.setWorld(serverWorld);
playerIn.interactionManager.setWorld(serverWorld);
playerIn.revive();
((ServerPlayNetHandlerBridge) playerIn.connection).bridge$teleport(new Location(((WorldBridge) serverWorld).bridge$getWorld(), playerIn.getPosX(), playerIn.getPosY(), playerIn.getPosZ(), playerIn.rotationYaw, playerIn.rotationPitch));
playerIn.setSneaking(false);
BlockPos pos1 = serverWorld.getSpawnPoint();
playerIn.connection.sendPacket(new SSpawnPositionPacket(pos1));
playerIn.connection.sendPacket(new SServerDifficultyPacket(worldInfo.getDifficulty(), worldInfo.isDifficultyLocked()));
playerIn.connection.sendPacket(new SSetExperiencePacket(playerIn.experience, playerIn.experienceTotal, playerIn.experienceLevel));
this.sendWorldInfo(playerIn, serverWorld);
this.updatePermissionLevel(playerIn);
if (!((ServerPlayNetHandlerBridge) playerIn.connection).bridge$isDisconnected()) {
serverWorld.addRespawnedPlayer(playerIn);
this.players.add(playerIn);
// this.playersByName.put(entityplayer2.getScoreboardName().toLowerCase(Locale.ROOT), entityplayer2);
this.uuidToPlayerMap.put(playerIn.getUniqueID(), playerIn);
}
playerIn.setHealth(playerIn.getHealth());
this.sendInventory(playerIn);
playerIn.sendPlayerAbilities();
for (Object o1 : playerIn.getActivePotionEffects()) {
EffectInstance mobEffect = (EffectInstance) o1;
playerIn.connection.sendPacket(new SPlayEntityEffectPacket(playerIn.getEntityId(), mobEffect));
}
playerIn.func_213846_b(((CraftWorld) fromWorld).getHandle());
if (fromWorld != location.getWorld()) {
PlayerChangedWorldEvent event = new PlayerChangedWorldEvent(((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity(), fromWorld);
Bukkit.getPluginManager().callEvent(event);
}
if (((ServerPlayNetHandlerBridge) playerIn.connection).bridge$isDisconnected()) {
this.writePlayerData(playerIn);
}
net.minecraftforge.fml.hooks.BasicEventHooks.firePlayerRespawnEvent(playerIn, flag);
return playerIn;
}
use of net.minecraft.network.play.server.SChangeGameStatePacket in project Arclight by IzzelAliz.
the class PlayerListMixin method arclight$useScaledHealth.
@Redirect(method = "sendInventory", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/ServerPlayerEntity;setPlayerHealthUpdated()V"))
private void arclight$useScaledHealth(ServerPlayerEntity playerEntity) {
((ServerPlayerEntityBridge) playerEntity).bridge$getBukkitEntity().updateScaledHealth();
int i = playerEntity.world.getGameRules().getBoolean(GameRules.REDUCED_DEBUG_INFO) ? 22 : 23;
playerEntity.connection.sendPacket(new SEntityStatusPacket(playerEntity, (byte) i));
if (ArclightVersion.atLeast(ArclightVersion.v1_15)) {
float immediateRespawn = playerEntity.world.getGameRules().getBoolean(GameRules.DO_IMMEDIATE_RESPAWN) ? 1.0f : 0.0f;
playerEntity.connection.sendPacket(new SChangeGameStatePacket(11, immediateRespawn));
}
}
Aggregations