Skip to content

Commit 5c420e5

Browse files
committed
fix tnt spoil feature
1 parent df97000 commit 5c420e5

File tree

6 files changed

+45
-72
lines changed
  • server_platform/server_platform_paper/server_platform_paper_v1_21_R1/src/main/java/dev/andrei1058/bedwars/platform/paper
  • versionsupport_nms_cmn1/src/main/java/dev/andrei1058/mc/bedwars
  • versionsupport_v1_20_R3/src/main/java/com/andrei1058/bedwars/support/version/v1_20_R3
  • versionsupport_v1_20_R4/src/main/java/com/andrei1058/bedwars/support/version/v1_20_R4
  • versionsupport_v1_21_R1/src/main/java/com/andrei1058/bedwars/support/version/v1_21_R1

6 files changed

+45
-72
lines changed

server_platform/server_platform_paper/server_platform_paper_v1_21_R1/src/main/java/dev/andrei1058/bedwars/platform/paper/v1_21_R1_NMS.java

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import net.minecraft.world.phys.Vec3D;
1919
import org.bukkit.command.Command;
2020
import org.bukkit.craftbukkit.v1_21_R1.CraftServer;
21+
import org.bukkit.craftbukkit.v1_21_R1.CraftWorld;
2122
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftFireball;
2223
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftLivingEntity;
2324
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftPlayer;
@@ -31,7 +32,6 @@
3132
import org.jetbrains.annotations.NotNull;
3233
import org.jetbrains.annotations.Nullable;
3334

34-
import java.lang.reflect.Field;
3535
import java.lang.reflect.InvocationTargetException;
3636
import java.lang.reflect.Method;
3737
import java.util.ArrayList;
@@ -40,6 +40,8 @@
4040
public class v1_21_R1_NMS extends AbstractVerImplCmn1
4141
{
4242

43+
private ClientboundPlayerInfoUpdatePacket.a ADD_PLAYER_ACTION = null;
44+
4345
public v1_21_R1_NMS(Plugin plugin, String name) {
4446
super(plugin, name);
4547
}
@@ -56,23 +58,17 @@ public boolean isBukkitCommandRegistered(String name) {
5658

5759
@Override
5860
public void setSource(TNTPrimed tnt, Player owner) {
59-
//todo tested does not work 05-09-2024 https://github.com/andrei1058/BedWars1058/issues/1040
6061
EntityLiving nmsEntityLiving = (((CraftLivingEntity) owner).getHandle());
6162
EntityTNTPrimed nmsTNT = (((CraftTNTPrimed) tnt).getHandle());
62-
try {
63-
Field sourceField = EntityTNTPrimed.class.getDeclaredField("d");
64-
sourceField.setAccessible(true);
65-
sourceField.set(nmsTNT, nmsEntityLiving);
66-
} catch (Exception ex) {
67-
ex.printStackTrace();
68-
}
63+
nmsTNT.h = nmsEntityLiving;
6964
}
7065

7166
@Override
7267
public ClientboundPlayerInfoUpdatePacket getAddPlayer(EntityPlayer player) {
73-
// todo cache this in production
74-
ClientboundPlayerInfoUpdatePacket.a action = (ClientboundPlayerInfoUpdatePacket.a) getPlayerSpawnAction("a");
75-
return new ClientboundPlayerInfoUpdatePacket(action, player);
68+
if (null == ADD_PLAYER_ACTION) {
69+
ADD_PLAYER_ACTION = (ClientboundPlayerInfoUpdatePacket.a) getPlayerSpawnAction("ADD_PLAYER");
70+
}
71+
return new ClientboundPlayerInfoUpdatePacket(ADD_PLAYER_ACTION, player);
7672
}
7773

7874
@Override
@@ -119,9 +115,10 @@ public boolean isProjectile(org.bukkit.inventory.ItemStack itemStack) {
119115

120116
@Override
121117
public void voidKill(Player p) {
122-
//todo
123-
// EntityPlayer player = getPlayer(p);
124-
// player.a(player.dM().m(), 1000);
118+
EntityPlayer player = getPlayer(p);
119+
// out of world
120+
var damageSource = ((CraftWorld)p.getWorld()).getHandle().aj().m();
121+
player.a(damageSource, 1000);
125122
}
126123
@Override
127124
public void showArmor(@NotNull Player victim, Player receiver) {
@@ -142,17 +139,13 @@ public String getMainLevel() {
142139

143140
@Override
144141
public int getVersion() {
145-
return 21;
142+
return 25;
146143
}
147144

148145

149146
@Override
150147
public Fireball setFireballDirection(Fireball fireball, @NotNull Vector vector) {
151148
EntityFireball fb = ((CraftFireball) fireball).getHandle();
152-
// fb.b = vector.getX() * 0.1D;
153-
// fb.c = vector.getY() * 0.1D;
154-
// fb.d = vector.getZ() * 0.1D;
155-
// todo experimental
156149
fb.a(new Vec3D(vector.getX(), vector.getY(), vector.getZ()), 0.1D);
157150
return (Fireball) fb.getBukkitEntity();
158151
}
@@ -187,17 +180,17 @@ public EntityPlayer getPlayer(Player player) {
187180
}
188181

189182
public void sendPacket(Player player, Packet<?> packet) {
190-
((CraftPlayer) player).getHandle().c.a(packet);
183+
((CraftPlayer) player).getHandle().c.b(packet);
191184
}
192185

193186
public void sendPackets(Player player, Packet<?> @NotNull ... packets) {
194187
PlayerConnection connection = ((CraftPlayer) player).getHandle().c;
195188
for (Packet<?> p : packets) {
196-
connection.a(p);
189+
connection.b(p);
197190
}
198191
}
199192

200-
private static Object getPlayerSpawnAction(String action) {
193+
private Object getPlayerSpawnAction(@SuppressWarnings("SameParameterValue") String action) {
201194
try {
202195
Class<?> cls = Class.forName("net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket$a");
203196
for (Object obj : cls.getEnumConstants()) {
@@ -208,11 +201,11 @@ private static Object getPlayerSpawnAction(String action) {
208201
return obj;
209202
}
210203
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) {
211-
System.out.println("could not find enum");
204+
getPlugin().getLogger().warning("Could not get player spawn action: " + action);
212205
}
213206
}
214207
} catch (Exception exception) {
215-
exception.printStackTrace();
208+
getPlugin().getLogger().warning("Could not get player spawn action: " + action);
216209
}
217210
throw new RuntimeException("Something went wrong... please report this to BedWars1058 by andrei1058");
218211
}

versionsupport_nms_cmn1/src/main/java/dev/andrei1058/mc/bedwars/AbstractVerImplCmn1.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,6 @@ public void registerVersionListeners() {
7676
public String getTag(org.bukkit.inventory.ItemStack itemStack, String key) {
7777
var tag = getDataContainer(itemStack);
7878
if (null == tag) {
79-
// todo testing only
80-
Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"Container is null for: "+itemStack.toString());
8179
return null;
8280
}
8381
return tag.get(
@@ -622,13 +620,8 @@ public void spigotHidePlayer(Player victim, @NotNull Player receiver) {
622620

623621
@Override
624622
public void playRedStoneDot(@NotNull Player player) {
625-
Color color = Color.RED;
626623
PacketPlayOutWorldParticles particlePacket = new PacketPlayOutWorldParticles(
627-
new ParticleParamRedstone(
628-
new Vector3f((float) color.getRed(),
629-
(float) color.getGreen(),
630-
(float) color.getBlue()), (float) 1
631-
),
624+
ParticleParamRedstone.b,
632625
true,
633626
player.getLocation().getX(),
634627
player.getLocation().getY() + 2.6,

versionsupport_v1_20_R3/src/main/java/com/andrei1058/bedwars/support/version/v1_20_R3/v1_20_R3.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -162,13 +162,7 @@ public void minusAmount(Player p, org.bukkit.inventory.@NotNull ItemStack i, int
162162
public void setSource(TNTPrimed tnt, Player owner) {
163163
EntityLiving nmsEntityLiving = (((CraftLivingEntity) owner).getHandle());
164164
EntityTNTPrimed nmsTNT = (((CraftTNTPrimed) tnt).getHandle());
165-
try {
166-
Field sourceField = EntityTNTPrimed.class.getDeclaredField("g");
167-
sourceField.setAccessible(true);
168-
sourceField.set(nmsTNT, nmsEntityLiving);
169-
} catch (Exception ex) {
170-
ex.printStackTrace();
171-
}
165+
nmsTNT.g = nmsEntityLiving;
172166
}
173167

174168
@Override
@@ -627,9 +621,7 @@ public String getMainLevel() {
627621

628622
@Override
629623
public int getVersion() {
630-
// impacts on sidebar
631-
// experimental score placeholders
632-
return 10;
624+
return 22;
633625
}
634626

635627
@Override

versionsupport_v1_20_R4/src/main/java/com/andrei1058/bedwars/support/version/v1_20_R4/v1_20_R4.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,9 @@ public class v1_20_R4 extends v1_20_R3 {
99
public v1_20_R4(Plugin plugin, String name) {
1010
super(plugin, name);
1111
}
12+
13+
@Override
14+
public int getVersion() {
15+
return 24;
16+
}
1217
}
Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
New version support Quality Control checklist:
22

33
- [ ] Tnt Spoil Feature must show particles over your head
4-
- [ ] You must not be able to drop the default wooden sword
4+
- [x] You must not be able to drop the default wooden sword
55
- [ ] No errors must appear in console when you place a TNT
6-
- [ ] No errors must appear in console when you re-spawn
7-
- [ ] When you try buying team upgrades you must get a chat message
6+
- [x] No errors must appear in console when you re-spawn
7+
- [x] When you try buying team upgrades you must get a chat message
88
- [x] You must not be able to break your own bed
99
- [x] Glass must be resistant from TNT explosions
1010
- [x] Stained Glass must be resistant from TNT explosions
1111
- [x] Obsidian must be resistant from TNT explosions
1212
- [x] Wool covered with Glass or Stained Glass must not explode
13-
- [ ] You must not be able to take off your armature
14-
- [ ] You must be able to break blocks placed by players
13+
- [x] You must not be able to take off your armature
14+
- [x] You must be able to break blocks placed by players
1515
- [x] You must not be able to place blocks in team-spawn region
16-
- [ ] You must not be seen by other players while you are in a re-spawning phase
16+
- [x] You must not be seen by other players while you are in a re-spawning phase
1717
- [ ] You must not be able to damage shopkeepers
18-
- [ ] Shopkeepers must not be targeted by Silverfishes or Iron Golems
19-
- [ ] You must not be targeted by your own Silverfishes or Iron Golems
20-
- [ ] There must be no errors at server start up
18+
- [x] Shopkeepers must not be targeted by Silverfishes or Iron Golems
19+
- [x] You must not be targeted by your own Silverfishes or Iron Golems
20+
- [x] There must be no errors at server start up
21+
- [ ] When you drink an invisibility potion your armor should not be visible to enemies
22+
- [ ] Language holograms (generator ecc) should not overlap each other

versionsupport_v1_21_R1/src/main/java/com/andrei1058/bedwars/support/version/v1_21_R1/v1_21_R1.java

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import net.minecraft.world.entity.projectile.IProjectile;
1818
import net.minecraft.world.item.*;
1919
import net.minecraft.world.phys.Vec3D;
20+
import org.bukkit.Bukkit;
2021
import org.bukkit.command.Command;
2122
import org.bukkit.craftbukkit.v1_21_R1.CraftServer;
2223
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftFireball;
@@ -60,19 +61,13 @@ public void setSource(TNTPrimed tnt, Player owner) {
6061
//todo tested does not work 05-09-2024 https://github.com/andrei1058/BedWars1058/issues/1040
6162
EntityLiving nmsEntityLiving = (((CraftLivingEntity) owner).getHandle());
6263
EntityTNTPrimed nmsTNT = (((CraftTNTPrimed) tnt).getHandle());
63-
try {
64-
Field sourceField = EntityTNTPrimed.class.getDeclaredField("d");
65-
sourceField.setAccessible(true);
66-
sourceField.set(nmsTNT, nmsEntityLiving);
67-
} catch (Exception ex) {
68-
ex.printStackTrace();
69-
}
64+
nmsTNT.h = nmsEntityLiving;
7065
}
7166

7267
@Override
7368
public ClientboundPlayerInfoUpdatePacket getAddPlayer(EntityPlayer player) {
7469
// todo cache this in production
75-
ClientboundPlayerInfoUpdatePacket.a action = (ClientboundPlayerInfoUpdatePacket.a) getPlayerSpawnAction("a");
70+
ClientboundPlayerInfoUpdatePacket.a action = (ClientboundPlayerInfoUpdatePacket.a) getPlayerSpawnAction("b");
7671
return new ClientboundPlayerInfoUpdatePacket(action, player);
7772
}
7873

@@ -143,17 +138,13 @@ public String getMainLevel() {
143138

144139
@Override
145140
public int getVersion() {
146-
return 21;
141+
return 25;
147142
}
148143

149144

150145
@Override
151146
public Fireball setFireballDirection(Fireball fireball, @NotNull Vector vector) {
152147
EntityFireball fb = ((CraftFireball) fireball).getHandle();
153-
// fb.b = vector.getX() * 0.1D;
154-
// fb.c = vector.getY() * 0.1D;
155-
// fb.d = vector.getZ() * 0.1D;
156-
// todo experimental
157148
fb.a(new Vec3D(vector.getX(), vector.getY(), vector.getZ()), 0.1D);
158149
return (Fireball) fb.getBukkitEntity();
159150
}
@@ -183,12 +174,6 @@ public Fireball setFireballDirection(Fireball fireball, @NotNull Vector vector)
183174
return i.E();
184175
}
185176

186-
public ItemStack applyTag(@NotNull ItemStack itemStack, NBTTagCompound tag) {
187-
// todo re-apply container?
188-
// itemStack.(tag);
189-
return itemStack;
190-
}
191-
192177
public EntityPlayer getPlayer(Player player) {
193178
return ((CraftPlayer) player).getHandle();
194179
}
@@ -208,14 +193,17 @@ private static Object getPlayerSpawnAction(String action) {
208193
try {
209194
Class<?> cls = Class.forName("net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket$a");
210195
for (Object obj : cls.getEnumConstants()) {
196+
Bukkit.getLogger().warning(obj.toString());
211197
try {
212198
Method m = cls.getMethod("name");
199+
Bukkit.getLogger().warning(m.toString());
213200
String name = (String) m.invoke(obj);
201+
Bukkit.getLogger().warning(name.toString());
214202
if (action.equals(name)) {
215203
return obj;
216204
}
217205
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) {
218-
System.out.println("could not find enum");
206+
Bukkit.getLogger().warning("could not find enum");
219207
}
220208
}
221209
} catch (Exception exception) {

0 commit comments

Comments
 (0)