11package net .earthcomputer .clientcommands ;
22
3+ import java .util .ArrayList ;
4+ import java .util .List ;
35import java .util .concurrent .atomic .AtomicInteger ;
46
7+ import net .minecraft .block .material .Material ;
8+ import net .minecraft .block .state .IBlockState ;
59import net .minecraft .client .Minecraft ;
10+ import net .minecraft .client .multiplayer .PlayerControllerMP ;
611import net .minecraft .client .resources .I18n ;
712import net .minecraft .enchantment .EnchantmentHelper ;
813import net .minecraft .entity .player .EntityPlayer ;
914import net .minecraft .init .Enchantments ;
1015import net .minecraft .inventory .ClickType ;
16+ import net .minecraft .network .play .client .CPacketPlayerTryUseItemOnBlock ;
17+ import net .minecraft .util .EnumFacing ;
18+ import net .minecraft .util .EnumHand ;
19+ import net .minecraft .util .math .BlockPos ;
1120
1221public class TempRulesImpl {
1322
@@ -17,6 +26,7 @@ private TempRulesImpl() {
1726 public static void registerEvents () {
1827 initBlockReachDistance ();
1928 initToolBreakProtection ();
29+ initGhostBlockFix ();
2030 }
2131
2232 private static void initBlockReachDistance () {
@@ -61,4 +71,31 @@ private static void initToolBreakProtection() {
6171 });
6272 }
6373
74+ private static List <BlockPos > blocksToUpdate = new ArrayList <>();
75+
76+ private static void initGhostBlockFix () {
77+ EventManager .addAttackBlockListener (e -> {
78+ if (TempRules .GHOST_BLOCK_FIX .getValue ()) {
79+ // Test conditions for instant-mining
80+ PlayerControllerMP controller = Minecraft .getMinecraft ().playerController ;
81+ IBlockState state = e .getWorld ().getBlockState (e .getPos ());
82+ boolean slowMine = state .getMaterial () != Material .AIR
83+ && state .getPlayerRelativeBlockHardness (e .getEntityPlayer (), e .getWorld (), e .getPos ()) >= 1 ;
84+ if (controller .isNotCreative () && !slowMine ) {
85+ blocksToUpdate .add (e .getPos ());
86+ }
87+ }
88+ });
89+ EventManager .addPlayerTickListener (e -> {
90+ if (!blocksToUpdate .isEmpty ()) {
91+ for (BlockPos pos : blocksToUpdate ) {
92+ // Update block by right clicking
93+ Minecraft .getMinecraft ().getConnection ().sendPacket (
94+ new CPacketPlayerTryUseItemOnBlock (pos , EnumFacing .DOWN , EnumHand .MAIN_HAND , 0 , 0 , 0 ));
95+ }
96+ blocksToUpdate .clear ();
97+ }
98+ });
99+ }
100+
64101}
0 commit comments