Skip to content

Commit ef5a3e3

Browse files
Only send start fall flying if player has elytra on chestplate in 1.9->1.8
Closes #625
1 parent e3baafa commit ef5a3e3

File tree

6 files changed

+83
-2
lines changed

6 files changed

+83
-2
lines changed

bukkit/src/main/java/com/viaversion/viarewind/BukkitPlugin.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,22 @@
1818
package com.viaversion.viarewind;
1919

2020
import com.viaversion.viarewind.api.ViaRewindPlatform;
21+
import com.viaversion.viarewind.protocol.v1_9to1_8.provider.InventoryProvider;
22+
import com.viaversion.viarewind.provider.BukkitInventoryProvider;
2123
import com.viaversion.viaversion.api.Via;
2224
import java.io.File;
25+
import com.viaversion.viaversion.api.platform.providers.ViaProviders;
2326
import org.bukkit.plugin.java.JavaPlugin;
2427

2528
public class BukkitPlugin extends JavaPlugin implements ViaRewindPlatform {
2629

2730
public BukkitPlugin() {
2831
Via.getManager().addEnableListener(() -> this.init(new File(getDataFolder(), "config.yml")));
2932
}
33+
34+
@Override
35+
public void onEnable() {
36+
final ViaProviders providers = Via.getManager().getProviders();
37+
providers.use(InventoryProvider.class, new BukkitInventoryProvider());
38+
}
3039
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* This file is part of ViaRewind - https://github.com/ViaVersion/ViaRewind
3+
* Copyright (C) 2018-2025 ViaVersion and contributors
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
package com.viaversion.viarewind.provider;
19+
20+
import com.viaversion.viarewind.protocol.v1_9to1_8.provider.InventoryProvider;
21+
import com.viaversion.viaversion.api.connection.UserConnection;
22+
import org.bukkit.Bukkit;
23+
import org.bukkit.Material;
24+
import org.bukkit.entity.Player;
25+
import org.bukkit.inventory.ItemStack;
26+
27+
public final class BukkitInventoryProvider extends InventoryProvider {
28+
29+
@Override
30+
public boolean hasElytra(final UserConnection connection) {
31+
final Player player = Bukkit.getPlayer(connection.getProtocolInfo().getUuid());
32+
final ItemStack chestplate = player.getInventory().getChestplate();
33+
return chestplate != null && chestplate.getType() == Material.ELYTRA;
34+
}
35+
36+
}

common/src/main/java/com/viaversion/viarewind/protocol/v1_9to1_8/Protocol1_9To1_8.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import com.viaversion.viabackwards.api.BackwardsProtocol;
2121
import com.viaversion.viarewind.api.data.RewindMappingData;
22+
import com.viaversion.viarewind.protocol.v1_9to1_8.provider.InventoryProvider;
2223
import com.viaversion.viarewind.protocol.v1_9to1_8.rewriter.BlockItemPacketRewriter1_9;
2324
import com.viaversion.viarewind.protocol.v1_9to1_8.rewriter.EntityPacketRewriter1_9;
2425
import com.viaversion.viarewind.protocol.v1_9to1_8.rewriter.PlayerPacketRewriter1_9;
@@ -92,6 +93,8 @@ public void init(UserConnection connection) {
9293

9394
@Override
9495
public void register(ViaProviders providers) {
96+
providers.register(InventoryProvider.class, new InventoryProvider());
97+
9598
Via.getManager().getScheduler().scheduleRepeating(new LevitationUpdateTask(), 0L, 50L, TimeUnit.MILLISECONDS);
9699
Via.getManager().getScheduler().scheduleRepeating(new CooldownIndicatorTask(), 0L, 50L, TimeUnit.MILLISECONDS);
97100
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* This file is part of ViaRewind - https://github.com/ViaVersion/ViaRewind
3+
* Copyright (C) 2018-2025 ViaVersion and contributors
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
package com.viaversion.viarewind.protocol.v1_9to1_8.provider;
19+
20+
import com.viaversion.viaversion.api.connection.UserConnection;
21+
import com.viaversion.viaversion.api.platform.providers.Provider;
22+
23+
public class InventoryProvider implements Provider {
24+
25+
public boolean hasElytra(final UserConnection connection) {
26+
return false;
27+
}
28+
29+
}

common/src/main/java/com/viaversion/viarewind/protocol/v1_9to1_8/rewriter/PlayerPacketRewriter1_9.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@
2323
import com.viaversion.viarewind.ViaRewind;
2424
import com.viaversion.viarewind.api.type.RewindTypes;
2525
import com.viaversion.viarewind.protocol.v1_9to1_8.Protocol1_9To1_8;
26+
import com.viaversion.viarewind.protocol.v1_9to1_8.provider.InventoryProvider;
2627
import com.viaversion.viarewind.protocol.v1_9to1_8.storage.BlockPlaceDestroyTracker;
2728
import com.viaversion.viarewind.protocol.v1_9to1_8.storage.BossBarStorage;
2829
import com.viaversion.viarewind.protocol.v1_9to1_8.storage.CooldownStorage;
2930
import com.viaversion.viarewind.protocol.v1_9to1_8.storage.EntityTracker1_9;
3031
import com.viaversion.viarewind.protocol.v1_9to1_8.storage.PlayerPositionTracker;
3132
import com.viaversion.viarewind.utils.ChatUtil;
33+
import com.viaversion.viaversion.api.Via;
3234
import com.viaversion.viaversion.api.data.entity.EntityTracker;
3335
import com.viaversion.viaversion.api.minecraft.BlockPosition;
3436
import com.viaversion.viaversion.api.minecraft.ClientWorld;
@@ -409,10 +411,12 @@ public void register() {
409411
map(Types.VAR_INT); // Action parameter
410412
handler(wrapper -> {
411413
final PlayerPositionTracker tracker = wrapper.user().get(PlayerPositionTracker.class);
414+
final InventoryProvider provider = Via.getManager().getProviders().get(InventoryProvider.class);
412415
final int action = wrapper.get(Types.VAR_INT, 1);
413416
if (action == 6) { // Jump with horse
414417
wrapper.set(Types.VAR_INT, 1, 7);
415-
} else if (action == 0 && !tracker.isOnGround()) { // Start sneaking
418+
} else if (action == 0 && provider.hasElytra(wrapper.user()) && !tracker.isOnGround()) { // Start sneaking
419+
System.out.println("Sending packet");
416420
final PacketWrapper elytra = PacketWrapper.create(ServerboundPackets1_9.PLAYER_COMMAND, wrapper.user());
417421
elytra.write(Types.VAR_INT, wrapper.get(Types.VAR_INT, 0));
418422
elytra.write(Types.VAR_INT, 8);

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ org.gradle.configuration-cache=true
77
project_jvm_version=17
88

99
project_group=com.viaversion
10-
project_version=4.0.11
10+
project_version=4.0.12-SNAPSHOT
1111
project_description=ViaVersion addon to allow 1.8.x and 1.7.x clients on newer server versions.
1212

1313
publishing_dev_id=FlorianMichael

0 commit comments

Comments
 (0)