Skip to content

Commit 0ccd89d

Browse files
committed
Implement correct block data setting for 1.14
1 parent c52a0a0 commit 0ccd89d

File tree

1 file changed

+25
-6
lines changed

1 file changed

+25
-6
lines changed

Plugin/src/main/java/net/iso2013/peapi/packet/EntityPacketFactoryImpl.java

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import net.iso2013.peapi.api.packet.*;
77
import net.iso2013.peapi.entity.EntityIdentifierImpl;
88
import net.iso2013.peapi.util.EntityTypeUtil;
9+
import net.iso2013.peapi.util.ReflectUtil;
910
import org.bukkit.Art;
1011
import org.bukkit.block.BlockFace;
1112
import org.bukkit.block.data.BlockData;
@@ -18,10 +19,25 @@
1819
import org.bukkit.projectiles.ProjectileSource;
1920
import org.bukkit.util.Vector;
2021

22+
import java.lang.reflect.InvocationTargetException;
23+
import java.lang.reflect.Method;
24+
2125
/**
2226
* Created by iso2013 on 4/23/2018.
2327
*/
2428
public class EntityPacketFactoryImpl implements EntityPacketFactory {
29+
private static final Class<?> cbBlockData;
30+
private static final Method getCombinedID;
31+
private static final Method getState;
32+
33+
static {
34+
cbBlockData = ReflectUtil.getCBClass("CraftBlockData");
35+
Class<?> nmsBD = ReflectUtil.getNMSClass("Block");
36+
getCombinedID = ReflectUtil.getMethod(nmsBD, "getCombinedId");
37+
getState = ReflectUtil.getMethod(cbBlockData, "getState");
38+
}
39+
40+
2541
@Override
2642
public EntityAnimationPacket createAnimationPacket(EntityIdentifier entity, EntityAnimationPacket
2743
.AnimationType type) {
@@ -195,12 +211,15 @@ private int getData(boolean fake, FakeEntity f, Entity e, EntityType t) {
195211
return ((Entity) s).getEntityId();
196212
}
197213
case FALLING_BLOCK:
198-
BlockData bd = ((FallingBlock) e).getBlockData();
199-
int type = fake ? (int) f.getField("id") : bd.getMaterial().getId();
200-
//FIXME: How is this done in 1.14?
201-
int data = 0;
202-
//int data = fake ? (int) f.getField("data") : bd.;
203-
return type | (data << 12);
214+
BlockData bd = fake ? (BlockData) f.getField("blockdata") : ((FallingBlock) e).getBlockData();
215+
if (getState != null) {
216+
try {
217+
return (int) getCombinedID.invoke(null, getState.invoke(cbBlockData.cast(bd)));
218+
} catch (IllegalAccessException | InvocationTargetException ignored) {
219+
}
220+
}
221+
222+
return bd.getMaterial().getId();
204223
case DROPPED_ITEM:
205224
case MINECART_CHEST:
206225
return 1;

0 commit comments

Comments
 (0)