@@ -94,7 +94,14 @@ private static boolean tryPlace(BlockState state, BlockPos pos, ServerLevel serv
9494 return false ;
9595 }
9696 String name = optionalName .get ();
97- serverLevel .setBlock (pos , waystone .defaultBlockState ().setValue (WaystoneBlock .FACING , facing ), 18 );
97+ boolean isWater = serverLevel .isWaterAt (pos .above ());
98+ serverLevel .setBlock (
99+ pos ,
100+ waystone .defaultBlockState ()
101+ .setValue (WaystoneBlock .FACING , facing )
102+ .setValue (ModelWaystone .Waterlogged , isWater ),
103+ 18
104+ );
98105 WaystoneLibrary .getInstance ().update (
99106 name ,
100107 locationDataFor (pos , serverLevel , facing ),
@@ -132,18 +139,22 @@ private static Vector3 spawnPosFor(ServerLevel world, BlockPos waystonePos, Dire
132139 BlockPos spawnBlockPos = waystonePos .relative (facing , -2 );
133140 int maxOffset = 10 ;
134141 int offset = 0 ;
135- while (world .getBlockState (spawnBlockPos ). isAir ( ) && offset <= maxOffset ) {
142+ while (isFree ( world .getBlockState (spawnBlockPos ), world , spawnBlockPos ) && offset <= maxOffset ) {
136143 spawnBlockPos = spawnBlockPos .below ();
137144 offset ++;
138145 }
139146 offset = 0 ;
140- while (!world .getBlockState (spawnBlockPos ). isAir ( ) && offset <= maxOffset ) {
147+ while (!isFree ( world .getBlockState (spawnBlockPos ), world , spawnBlockPos ) && offset <= maxOffset ) {
141148 spawnBlockPos = spawnBlockPos .above ();
142149 offset ++;
143150 }
144151 return Vector3 .fromBlockPos (spawnBlockPos ).add (0.5f , 0 , 0.5f );
145152 }
146153
154+ private static boolean isFree (BlockState state , ServerLevel world , BlockPos waystonePos ) {
155+ return state .getCollisionShape (world , waystonePos ).isEmpty ();
156+ }
157+
147158 private static ModelWaystone getWaystoneType (Random random , List <ModelWaystone > allowedWaystones ) {
148159 return allowedWaystones .get (random .nextInt (allowedWaystones .size ()));
149160 }
0 commit comments