Fixed bugs related to picking up players
- Fixed slowness getting stuck when the other player dismounted with shift - Fixed bug where player couldn't press shift to dismount - Fixed being unable to place other player back down
This commit is contained in:
parent
e79e52cf65
commit
9a484df16e
|
|
@ -38,6 +38,7 @@ import net.minecraft.world.entity.AreaEffectCloud;
|
|||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntitySpawnReason;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
|
@ -50,6 +51,7 @@ import tschipp.carryon.common.scripting.CarryOnScript;
|
|||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
public class CarryOnData {
|
||||
|
||||
|
|
@ -103,6 +105,11 @@ public class CarryOnData {
|
|||
|
||||
}
|
||||
|
||||
public CarryType getType()
|
||||
{
|
||||
return this.type;
|
||||
}
|
||||
|
||||
public CompoundTag getNbt()
|
||||
{
|
||||
nbt.putString("type", type.toString());
|
||||
|
|
@ -201,8 +208,20 @@ public class CarryOnData {
|
|||
this.activeScript = script;
|
||||
}
|
||||
|
||||
public void setCarryingPlayer() {
|
||||
public void setCarryingPlayer(Player player)
|
||||
{
|
||||
this.type = CarryType.PLAYER;
|
||||
nbt.putString("player", player.getStringUUID().toString());
|
||||
}
|
||||
|
||||
public Player getCarryingPlayer(Level level)
|
||||
{
|
||||
if(this.type != CarryType.PLAYER)
|
||||
throw new IllegalStateException("Called getCarryingPlayer on data that contained " + this.type);
|
||||
if(!nbt.contains("player"))
|
||||
return null;
|
||||
UUID uuid = UUID.fromString(nbt.getString("player").get());
|
||||
return level.getServer().getPlayerList().getPlayer(uuid);
|
||||
}
|
||||
|
||||
public boolean isCarrying()
|
||||
|
|
|
|||
|
|
@ -239,9 +239,9 @@ public class PickupHandler {
|
|||
player.level().getServer().getCommands().performPrefixedCommand(player.level().getServer().createCommandSourceStack(), "/execute as " + player.getGameProfile().name() + " run " + cmd);
|
||||
}
|
||||
|
||||
otherPlayer.startRiding(player, true,true);
|
||||
otherPlayer.startRiding(player, true, false);
|
||||
Services.PLATFORM.sendPacketToAllPlayers(Constants.PACKET_ID_START_RIDING_OTHER, new ClientboundStartRidingOtherPlayerPacket(player.getId(), otherPlayer.getId(), true), player.level());
|
||||
carry.setCarryingPlayer();
|
||||
carry.setCarryingPlayer(otherPlayer);
|
||||
player.swing(InteractionHand.MAIN_HAND, true);
|
||||
player.level().playSound(null, player.getOnPos(), SoundEvents.ARMOR_EQUIP_GENERIC.value(), SoundSource.AMBIENT, 1.0f, 0.5f);
|
||||
CarryOnDataManager.setCarryData(player, carry);
|
||||
|
|
|
|||
|
|
@ -175,7 +175,7 @@ public class PlacementHandler
|
|||
Vec3 placementPos = Vec3.atBottomCenterOf(pos);
|
||||
|
||||
if (carry.isCarrying(CarryType.PLAYER)) {
|
||||
Entity otherPlayer = player.getFirstPassenger();
|
||||
Entity otherPlayer = carry.getCarryingPlayer(level);
|
||||
player.ejectPassengers();
|
||||
Services.PLATFORM.sendPacketToAllPlayers(Constants.PACKET_ID_START_RIDING_OTHER, new ClientboundStartRidingOtherPlayerPacket(player.getId(), otherPlayer.getId(), false), player.level());
|
||||
carry.clear();
|
||||
|
|
|
|||
|
|
@ -34,6 +34,9 @@ import org.spongepowered.asm.mixin.injection.At;
|
|||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
|
||||
|
||||
import tschipp.carryon.Constants;
|
||||
import tschipp.carryon.common.carry.CarryOnData;
|
||||
import tschipp.carryon.common.carry.CarryOnData.CarryType;
|
||||
|
|
@ -47,6 +50,13 @@ public abstract class EntityMixin
|
|||
@Shadow
|
||||
public boolean hasPassenger(Entity pEntity) {throw new IllegalStateException("EntityMixin application failed");}
|
||||
|
||||
|
||||
@ModifyExpressionValue(method = "startRiding(Lnet/minecraft/world/entity/Entity;ZZ)Z", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/EntityType;canSerialize()Z"))
|
||||
private boolean onStartRidingCheck(boolean original, Entity entity, boolean force) {
|
||||
if (force && entity instanceof Player) return true;
|
||||
return original;
|
||||
}
|
||||
|
||||
@Shadow public abstract void onPassengerTurned(Entity $$0);
|
||||
|
||||
@Inject(method = "positionRider(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity$MoveFunction;)V", at = @At("HEAD"), cancellable = true)
|
||||
|
|
|
|||
|
|
@ -21,17 +21,23 @@
|
|||
package tschipp.carryon.mixin;
|
||||
|
||||
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.effect.MobEffects;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.storage.ValueInput;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import tschipp.carryon.common.carry.CarryOnData;
|
||||
import tschipp.carryon.common.carry.CarryOnDataManager;
|
||||
import tschipp.carryon.common.carry.PlacementHandler;
|
||||
import tschipp.carryon.common.carry.CarryOnData.CarryType;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
|
|
@ -50,4 +56,17 @@ public abstract class PlayerMixin extends LivingEntity {
|
|||
res.ifPresent(data -> CarryOnDataManager.setCarryData((Player)((Object)this), data));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void stopRiding() {
|
||||
Entity entity = this.getVehicle();
|
||||
if (entity instanceof Player && entity.getPassengers().size() < 2){
|
||||
CarryOnData carry = CarryOnDataManager.getCarryData((Player) entity);
|
||||
if (carry.getType() == CarryType.PLAYER){
|
||||
carry.clear();
|
||||
((Player) entity).removeEffect(MobEffects.SLOWNESS);
|
||||
}
|
||||
}
|
||||
super.stopRiding();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user